問題の原因はOledbプロバイダーです
混合データ型の列を持つcsvファイルまたはExcelファイルをインポートすると、非主要な型がnull
に置き換えられます。 。 (OledbまたはAce.Oledbの使用 )
回避策
文字列値を含む最初の行を追加し、impirtingが終了した後にそれを削除することで、いくつかの回避策を実行できます
ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l
また、IMEX=1
を使用すると問題が修正されます
これにより、列が文字列として読み取られ、ID列が数値として読み取られます。 (0が使用されます)
または、HDR=NO
を追加します ヘッダーがインポートされた最初の行になるように接続文字列へのプロパティ(すべての値は文字列です)
この
その他の方法
または、aceoledbプロバイダーなしでこれを達成してみてください。次のような他の方法でcsvファイルをインポートするだけです。
Microsoftテキストドライバの使用
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')
BULKINSERTの使用
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'
)
これらの記事のその他の詳細: