CSVファイルからデータを一括挿入する次のコマンドを実行しようとしています-
BULK INSERT TestDB.dbo.patent
FROM 'C:\1patents.csv'
WITH (FIRSTROW = 1, FIELDTERMINATOR = '^', ROWTERMINATOR='\n');
私が得ているエラーはこれです-
メッセージ4866、レベル16、状態1、行1
一括読み込みに失敗しました。データファイルの行1、列6の列が長すぎます。
フィールドターミネータと行ターミネータが正しく指定されていることを確認します。
メッセージ7399、レベル16、状態1、行1
OLEリンクサーバー "(null)"のDBプロバイダー "BULK"がエラーを報告しました。プロバイダーはエラーに関する情報を提供しませんでした。
メッセージ7330、レベル16、状態2、行1
OLEリンクサーバー "(null)"のDBプロバイダー "BULK"から行をフェッチできません。
これが最初の行のデータです。
00000001^^18360713^295^4^0
また、表の最後のフィールド(上記のデータの6番目の列= 0に対応)は「int」型です。
ここで何が悪いのですか?上記のエラーが発生するのはなぜですか?
Oracle/Unixから抽出しました。交換しました\r\n
沿って ROWTERMINATOR = '0x0a'
そしてそれは私のために働いた。
どうもありがとう !
上記の回答のように、csvファイルをSQL Serverにインポートするのと同じ問題がありました。私はROWTERMINATOR = '\n'
を使用しており、'\r\n'
と'\r'
も使用しようとしました。それらのどれもうまくいきませんでした。
しかし、ROWTERMINATOR = '0x0a'
を使用すると、テーブルは問題なくロードされました。
「なぜ?」はわかりません。この背後で、うまくいけば他の誰かがそれを明らかにすることができます。
ファイルソースがUnixでない限り、ファイルの行のターミネータは実際には
\ r\n
16進エディタを使用してファイルのターミネータを検証するか、行のターミネータとして試してください。
私は同様の問題に直面し、ファイルがUNIXタイプでない限り\ r\nで問題ないことを知りました。
フォーマットファイル(。fmtまたは.xml)を生成すると、左から3番目の列に注目してください。その呼び出された最小長列。場合によっては、SQLサーバーはデフォルトで2に設定しますが、作成スクリプトでは言及していません。その値をに変更します。 NULLも許可する必要がある場合があるので、これをゼロに変更すると、正常に機能するはずです。