私はバルクにしようとしています次の列一括挿入は
create table raw.sub_brand_channel_mapping
(
ImportFileId int NULL,
[sub_brand_id] int ,
[sub_brand_name] [nvarchar](1024) ,
[channel_country_id] int ,
[channel_id] int,
[channel_name] [nvarchar](1024) ,
[status] [varchar](1024) ,
[eff_start_date] date ,
[eff_end_date] date
)
.csv
ファイルを挿入している私のSQL Serverのテーブルを持っています。私のテーブルには9列あり、私のCSVデータファイルには8列あります。最初の列 "ImportFileId"は後で入力されるはずです。この目的のために、私は以下のような形式のファイルを使用しています。
10.0
8
1 SQLCHAR 0 1000 "|" 2 sub_brand_id ""
2 SQLCHAR 0 2000 "|" 3 sub_brand_name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 2000 "|" 4 channel_country_id ""
4 SQLCHAR 0 2000 "|" 5 channel_id ""
5 SQLCHAR 0 2000 "|" 6 channel_name SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 2000 "|" 7 status SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 2000 "|" 8 eff_start_date ""
8 SQLCHAR 0 2000 "\r\n" 9 eff_end_date ""
第1列が空のままであることが分かる。データをutf-8エンコーディングとして使用してBULK INSERTを使用すると、BULK INSERTは成功します。ただし、SQL Serverバージョン12ではutf-8エンコーディングがサポートされていないため、データ内の特殊文字が変更されます。
元のデータを維持するために、私はエンコードをutf-16に変換します。しかし、私は、同じ形式のファイルと同じBULK INSERTコマンドを使用するとき、私はエラーを取得:
BULK INSERT <table> FROM <data_path>
WITH (
FORMATFILE = <Format_File_path>
FIRSTROW = 2,
LASTROW = 3
)
P.S.:
Msg 4864, Level 16, State 1, Line 1
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 1 (sub_brand_id).
マイ一括挿入クエリは次のようになります私のデータには特殊文字、奇妙な中国語と日本語の名前、ポルトガル語とスペイン語のミックスがあります。データを不変のままにするために、私はutf-16を使う必要があります。
誰もがこれに理由と解決策を提供できますか?頭の上から
私は上記の両方の提案を試しました。しかし、それは両方のために動作しません! P.P. - 私のテーブルが私のデータファイルの列と同じ数の列を持っていて、私はBULK INSERTを行います。それは動作します。 –