Przyczyną problemu jest dostawca Oledb
Podczas importowania pliku csv lub plików excel z kolumną mieszanych typów danych zastąpi typy niedominujące przez null
. (Korzystanie z Oledb lub Ace.Oledb )
Obejścia
Możesz obejść ten problem, dodając pierwszy wiersz zawierający wartości ciągu, a następnie usuwając go po zakończeniu importowania
ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l
I rozwiąże problem, jeśli użyjesz IMEX=1
To odczyta kolumny jako ciąg, a kolumnę ID jako liczbę. (0 jest używane)
Lub dodaj HDR=NO
właściwość do ciągu połączenia, więc nagłówek jest pierwszym importowanym wierszem (wszystkie jego wartości są ciągami)
Przeczytaj więcej o mieszanych typach danych w tym artykuł
Inne metody
Lub spróbuj to osiągnąć bez dostawcy aceoledb, po prostu zaimportuj plik csv w inny sposób, jak poniżej:
Korzystanie ze sterownika Microsoft Text
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')
Korzystanie z 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'
)
Inne szczegóły w tych artykułach:
- Jak zaimportować plik csv za pomocą OPENROWSET?
- T-SQL – Odczytaj pliki CSV za pomocą OpenRowSet (Szczegółowy samouczek)