トップ回答者
BULK INSERT フォーマットファイル使用し、UNICODEファイルが取り込めない。

質問
-
SQL SERV2008 R2のストアドでの質問です。
CSVファイルからテーブルに取り込まないフィールドが有り、フォーマットファイルにてフィールドをスキップさせようとしています。
その前段で「テーブルフィールド数=CSVファイルの項目数」の時、SJIS時は正常に取り込まれるのですがUNICODEにすると取り込まれません。
その際のストアドにエラーメッセージは出力されません。
以下がストアドです。
/******************************************************************/
SET @cSQL =N'BULK INSERT dbo.T_TEST' +
N' FROM ''' + @FullPath + '''' +
N' WITH (DATAFILETYPE = ''widechar''' + ',' +
'FORMATFILE = ''' + @vcFmtFile + '''' + ',' +
'FIRSTROW = 2)'EXECUTE @iCHK= sp_executesql @cSQL, N''
/******************************************************************/
以下はファイルフォーマットです。(bcpコマンドによりxml形式で作成)
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="20" COLLATION="Japanese_BIN"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="100" COLLATION="Japanese_BIN"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="100" COLLATION="Japanese_BIN"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="100" COLLATION="Japanese_BIN"/>
<FIELD ID="5" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="Japanese_BIN"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="C01" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="2" NAME="C02" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="C03" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="C04" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="5" NAME="C05" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>/******************************************************************/
ネットで検索するとフォーマットファイル使用に於けるUNICODEの使用は面倒な設定等は無いように見受けられるのですが原因が解りません。
(DATAFILETYPE=widecharに設定する位かなと...)
アドバイスを頂けないでしょうか?
以上、よろしくお願いいたします。
回答
-
ERRORFILEを指定しても何も出力されませんでした。
ネットで検索すると海外で関連する内容が出ていました。
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=38831
翻訳しても正確には把握できないのですが、一番下の3行をみると
フォーマットファイルとUnicodeファイルの両方を使うことが出来ない。
と、解釈出来るような気がします。
と言う事で今回はフォーマットファイルを使用した項目のスキップは諦めました。
ありがとうございました。
- 回答としてマーク hareru 2016年3月11日 12:38
すべての返信
-
そもそも質問者さんの言う「UNICODEファイル」とは何でしょうか? Unicode 文字形式を使用したデータのインポートまたはエクスポートには
Unicode 文字形式のデータ ファイルは、Unicode ファイルの規則に従います。ファイルの先頭の 2 バイトは、16 進数の 0xFFFE です。これらのバイトは、バイト順マークとしての役割を果たし、高位のバイトをファイルの先頭に格納するか、最後に格納するかを指定します。
と記載されていますが、条件を満たしていますでしょうか? 例えば0xEF 0xBB 0xBFで始まっていたりしませんよね?
-
ERRORFILEを指定しても何も出力されませんでした。
ネットで検索すると海外で関連する内容が出ていました。
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=38831
翻訳しても正確には把握できないのですが、一番下の3行をみると
フォーマットファイルとUnicodeファイルの両方を使うことが出来ない。
と、解釈出来るような気がします。
と言う事で今回はフォーマットファイルを使用した項目のスキップは諦めました。
ありがとうございました。
- 回答としてマーク hareru 2016年3月11日 12:38