Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Erreur d'importation avec Openrowset

La cause du problème est le fournisseur Oledb

Lors de l'importation de fichiers csv ou de fichiers Excel avec une colonne de types de données mixtes, il remplacera les types non dominants par null . (Utiliser Oledb ou Ace.Oledb )

Solutions

Vous pouvez contourner le problème en ajoutant une première ligne contenant des valeurs de chaîne, puis en la supprimant une fois l'importation terminée

ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l

Et cela résoudra le problème si vous utilisez IMEX=1

Cela lira les colonnes sous forme de chaîne et la colonne ID sous forme de nombre. (0 est utilisé)

Ou ajoutez HDR=NO propriété à la chaîne de connexion afin que l'en-tête soit la première ligne importée (toutes ses valeurs sont des chaînes)

En savoir plus sur les types de données mixtes dans ce article

Autres méthodes

Ou essayez d'y parvenir sans le fournisseur aceoledb, importez simplement le fichier csv d'une autre manière comme suit :

Utilisation du pilote de texte Microsoft

SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')

Utiliser 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' 
  )

Autres détails dans ces articles :