Orsaken till problemet är Oledb-leverantören
När du importerar csv-filer eller excel-filer med kolumnen för blandade datatyper kommer den att ersätta icke-dominerande typer med null
. (Använder Oledb eller Ace.Oledb )
Lösningar
Du kan göra en lösning genom att lägga till en första rad som innehåller strängvärden och sedan ta bort den efter att impreringen är klar
ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l
Och det löser problemet om du använder IMEX=1
Detta kommer att läsa kolumner som sträng och ID-kolumn som nummer. (0 används)
Eller lägg till HDR=NO
egenskap till anslutningssträng så att rubriken är den första importerade raden (alla dess värden är strängar)
Läs mer om blandade datatyper i denna artikel
Andra metoder
Eller försök att uppnå detta utan aceoledb-leverantör, bara importera csv-fil på annat sätt som följande:
Använda Microsoft Text Driver
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')
Använda 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'
)
Övriga detaljer i dessa artiklar:
- Hur importerar man en csv-fil med OPENROWSET?
- T-SQL – Läs CSV-filer med OpenRowSet (En detaljerad handledning)