Příčinou problému je poskytovatel Oledb
Při importu souboru csv nebo souborů aplikace Excel se sloupcem smíšených typů dat nahradí nedominantní typy výrazem null
. (Použití Oledb nebo Ace.Oledb )
Řešení
Můžete to obejít přidáním prvního řádku obsahujícího řetězcové hodnoty a jeho odstraněním po dokončení impirace
ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l
A problém vyřeší, pokud použijete IMEX=1
To bude číst sloupce jako řetězec a sloupec ID jako číslo. (používá se 0)
Nebo přidejte HDR=NO
vlastnost na spojovací řetězec, takže záhlaví je prvním importovaným řádkem (všechny jeho hodnoty jsou řetězce)
Další informace o smíšených typech dat naleznete v tomto článek
Další metody
Nebo se pokuste toho dosáhnout bez poskytovatele aceoledb, stačí importovat soubor csv jiným způsobem, jako je následující:
Použití Microsoft Text Driver
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')
Pomocí 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'
)
Další podrobnosti v těchto článcích:
- Jak importovat soubor csv pomocí OPENROWSET?
- T-SQL – Čtení souborů CSV pomocí OpenRowSet (Podrobný výukový program)