SSIS: import from CSV to SQL Server 2005

mercoledì 02 settembre 2009 - 11.54

the_driver Profilo | Senior Member

Ciao a tutti, attualmente sto utilizzando sql import\export wizard di sql server 2005 per importare dei file csv in tabelle sql server 2005

Ho deciso di utilizzare i csv in quanto sia con file xls e mdb (access) avevo svariati problemi durante l'esecuzione del package, in quanto la procedura si bloccata su alcune colonne segnalandomi problemi nella conversion/perdita di dati.

Quindi utilizzando i csv ho pensato che, essendo un file di testo, i dati letti non avevano problemi di formato e la conversione sarebbe stata immediata e senza problemi.

In realtà anche con i csv ho il seguente problema:

Data conversion failed while converting column "15_race" (18) to column "15_race" (163). The conversion returned status value 2 and status text "The value could not be converted because of a potential loss of data.".

Il campo di destinazione è un intero(INT). Il dato che viene letto è un numero (0 o 1)ovviamente in formato testo.

Teoricamente non ci devono essere problemi convertendo un valore numerico (ascii)in un campo INT?

Come potrei procedere?


Ho anche creato una query custom:

use Database_Name go BULK INSERT dbo.Tabella1 FROM 'C:\Documents and Settings\Administrator\Desktop\csv\Tabella1.csv' WITH ( FIRSTROW=2, MAXERRORS=0, FIELDTERMINATOR = ';', ROWTERMINATOR = '\n' )

Però riscontro il seguente errore:

Msg 4864, Level 16, State 1, Line 1
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 9 (22_dbirth).
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)"


Quindi ho rivisto tutte le date e le messe nel formato yyyymmdd,la procedura funziona correttamente.


L'unica cosa è che nel mio csv ci sono dei valori come il seguente: 01002121 ecc ...
Il valore viene salvato in un campo varchar ma mi viene troncato lo 0 iniziale --> 1002121.

Come posso ovviare al problema?



grazie

alx_81 Profilo | Guru

>Ciao a tutti,
Ciao

>L'unica cosa è che nel mio csv ci sono dei valori come il seguente:
>01002121 ecc ... Il valore viene salvato in un campo varchar ma mi viene troncato
>lo 0 iniziale --> 1002121.
sembra quasi che questo valore venga implicitamente convertito in intero. Forse perchè in effetti contiene sempre dati numerici?
Ho paura che al suo interno questa operazione faccia conversioni implicite.
Quindi ti conviene usare un file di formato che specifica come è fatto il csv.
Leggi qui per ulteriori informazioni:
http://msdn.microsoft.com/it-it/library/ms188365.aspx

e qui per il formato:
http://msdn.microsoft.com/it-it/library/ms189327.aspx
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5