sql >> Databáze >  >> RDS >> Sqlserver

Chyba importu pomocí Openrowset

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:



  1. Jak vytvořit dokument Excel z programu Java pomocí Apache POI

  2. MySQL SUM() dává nesprávný součet

  3. Převeďte řetězec s oddělovači na řádky v oracle

  4. Bizarní chyba při pokusu o připojení k databázi