Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Errore di importazione utilizzando Openrowset

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: