sql >> Databasteknik >  >> RDS >> Sqlserver

Importfel med Openrowset

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:



  1. Sorterar du om id-kolumnen i en MySQL-tabell?

  2. Få ut specialtecken från en MySQL-databas med PHP

  3. Hur man förvandlar MySQL-strängar till SQL Server-ekvivalenter

  4. Flask-Sqlalchemy saknas BEGIN verkar orsaka osynkroniserade sessioner