bcpコマンドでフォーマット ファイルを利用する方法(第7章の補足)

bcp コマンドには、既存のテーブル情報をもとに、フォーマット ファイルを自動生成してくれる機能があります。たとえば、次のようにインポート先のテーブルとインポートしたいデータがあるとします。

-- インポート先のテーブル
USE sampleDB
CREATE TABLE t1
( a int
 ,b char(10) )

-- インポートしたいデータ(C:\bulkTest1.csv)
1,AAA
2,BBB
3,CCC

この場合に、bcp コマンドをコマンド プロンプトから次のように実行すると、フォーマット ファイルを自動生成してくれます。

bcp sampleDB.dbo.t1 format nul -T -c -t "," -f C:\test.fmt

自動生成されたフォーマット ファイル(カンマ区切りの CSV ファイル用)

本文中で説明した bcp コマンドとの違いは、format nul-f オプションだけです。
残りのオプションは、同じ意味で、-T で Windows 認証、-c -t "," でカンマ区切りのテキスト ファイル形式であることを指定しています。
-f オプションでは、生成したいフォーマット ファイルの名前を任意で指定できます(拡張子を .fmt とするのが慣習です)。

このフォーマット ファイルを利用して、bcp コマンドでデータをインポートするには、次のように実行します。

 

■ データが二重引用符(”)で囲まれている場合のフォーマット ファイル

次に、データが二重引用符で囲まれている場合のフォーマット ファイルの記述方法を説明します。

-- インポートしたいデータ(C:\bulkTest2.csv)
"1","XXX"
"2","YYY"
"3","ZZZ"

このようにデータが二重引用符で囲まれている場合は、先ほどのフォーマット ファイルでは次のように「キャストした文字コードが正しくありません」というエラーになります。

このようにデータが二重引用符で囲まれている場合は、フォーマット ファイルを次のように記述します。

自動生成した test.fmt ファイルへ \" を追加して、3列分を記述しています。先頭の " を処理するためにダミー列を 1列分記述し、¥ マークはエスケープ シーケンスです。
このファイルを test2.fmt という名前で保存し、実行すると次のようになります。

このように、bcp コマンドでは、データが二重引用符で囲まれている場合にフォーマット ファイルを利用しなければなりません。これに対して、本文中で説明した Integration Services を利用すれば、わざわざフォーマット ファイルを作成することなく、簡単に実現することができます。