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 :
- Comment importer un fichier csv avec OPENROWSET ?
- T-SQL - Lire les fichiers CSV à l'aide d'OpenRowSet (Un tutoriel détaillé)