Причината за проблема е доставчикът Oledb
Когато импортирате csv файл или excel файлове с колона със смесени типове данни, той ще замени недоминиращите типове с null
. (Използване на Oledb или Ace.Oledb )
Заобиколни решения
Можете да направите някакво заобиколно решение, като добавите първи ред, който съдържа низови стойности, след което го премахнете, след като impirting приключи
ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l
И това ще реши проблема, ако използвате IMEX=1
Това ще прочете колоните като низ и ID колоната като число. (използва се 0)
Или добавете HDR=NO
свойство към низ за връзка, така че заглавката да е първия импортиран ред (всички негови стойности са низове)
Прочетете повече за смесените типове данни в този статия
Други методи
Или опитайте да постигнете това без доставчик на aceoledb, просто импортирайте csv файл по друг начин, като следния:
Използване на Microsoft Text Driver
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')
Използване на 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'
)
Други подробности в тези статии:
- Как да импортирам csv файл с OPENROWSET?
- T-SQL – Четете CSV файлове с помощта на OpenRowSet (Подробен урок)