1

パイプ区切りの CSV ファイルから SQL Server にデータを一括インポートしています。データは次のようにフォーマットされます

A|B|CCCCCC\r\n

CSV ファイルを 16 進エディタで表示して、ファイルが UTF-8 形式であることと、行が「\r\n」で終了していることの両方を検証しました。

コマンドは

BULK INSERT MyTable FROM 'C:\Path\File.csv'
WITH (FIRSTROW=1, MAXERRORS=0, BATCHSIZE=10000, FIELDTERMINATOR = '|', 
      ROWTERMINATOR = '\r\n')

3 番目の列は、最初は CHAR(6) として定義されていました。これは、このフィールドが常に正確に 6 (ASCII) 文字幅のコードであるためです。その結果、一括挿入中に切り捨てエラーが発生しました。

次に、列をCHAR(8)に広げました。インポートは機能しましたが、

SELECT CAST(Col3 As VARBINARY(MAX))

列データが 0x0D0A (または「\r\n」、行ターミネータ) で終わることを示します。

インポートされたデータに行ターミネータが含まれているのはなぜですか?どうすれば修正できますか?

4

1 に答える 1

1

簡単に言えば、SQL Server は UTF-8 をサポートしておらず\n、行ターミネータとして必要なだけです。

テーブル定義または正確なエラー メッセージを提供しなかったため、実際には何が起こっているのかが少し不明確です。そうは言っても、次のデータをロードできました。

create table dbo.BCPTest (
    col1 nchar(1) not null,
    col2 nchar(1) not null,
    col3 nchar(6) not null
)

/* This data can saved as ASCII, UTF-16 with BOM or UTF-8 without BOM
   (see comments below)

A|B|CCCCCC
D|E|FFFFFF

*/

BULK INSERT dbo.BCPTest FROM 'c:\testfile.csv'
WITH (FIELDTERMINATOR = '|', ROWTERMINATOR = '\n')

コメント:

于 2013-05-01T15:16:06.253 に答える