La causa del problema è il provider Oledb
Quando si importano file CSV o file Excel con la colonna dei tipi di dati misti, i tipi non dominanti verranno sostituiti con null
. (Utilizzo di Oledb o Ace.Oledb )
Soluzioni alternative
Puoi risolvere il problema aggiungendo una prima riga che contiene valori di stringa, quindi rimuovendola al termine dell'importazione
ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l
E risolverà il problema se utilizzi IMEX=1
Questo leggerà le colonne come stringa e la colonna ID come numero. (viene utilizzato 0)
Oppure aggiungi HDR=NO
proprietà alla stringa di connessione in modo che l'intestazione sia la prima riga importata (tutti i suoi valori sono stringhe)
Ulteriori informazioni sui tipi di dati misti in questo articolo
Altri metodi
Oppure prova a raggiungere questo obiettivo senza il provider aceoledb importa semplicemente il file CSV in un altro modo come il seguente:
Utilizzo del driver di testo Microsoft
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')
Utilizzo di BULK INSERT
CREATE TABLE dbo.MyTable
(ID INTEGER,
A VARCHAR(50),
B VARCHAR(50),
C VARCHAR(50)
)
BULK INSERT dbo.MyTable
FROM 'C:\abc.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
Altri dettagli in questi articoli:
- Come importare file CSV con OPENROWSET?
- T-SQL:legge i file CSV utilizzando OpenRowSet (Un tutorial dettagliato)