bcp コマンドには、既存のテーブル情報をもとに、フォーマット ファイルを自動生成してくれる機能があります。たとえば、次のようにインポート先のテーブルとインポートしたいデータがあるとします。
--
インポート先のテーブル
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 コマンドでデータをインポートするには、次のように実行します。
次に、データが二重引用符で囲まれている場合のフォーマット ファイルの記述方法を説明します。
"1","XXX"
"2","YYY"
"3","ZZZ"
このようにデータが二重引用符で囲まれている場合は、先ほどのフォーマット ファイルでは次のように「キャストした文字コードが正しくありません」というエラーになります。
このようにデータが二重引用符で囲まれている場合は、フォーマット ファイルを次のように記述します。
自動生成した test.fmt ファイルへ \"
を追加して、3列分を記述しています。先頭の " を処理するためにダミー列を 1列分記述し、¥ マークはエスケープ シーケンスです。
このファイルを test2.fmt という名前で保存し、実行すると次のようになります。
このように、bcp コマンドでは、データが二重引用符で囲まれている場合にフォーマット ファイルを利用しなければなりません。これに対して、本文中で説明した Integration Services を利用すれば、わざわざフォーマット ファイルを作成することなく、簡単に実現することができます。