bcpでDBのデータをcsvファイルに出力する

bcpはデータファイルの入出力のためのSQL Serverコマンドラインツールです。今回、バッチファイルでDBのデータをcsvファイルに出力する必要があったので使いました(本当はExcelに出力したかったのですが)。以下参考です。出力のフォーマットの指定にはフォーマットファイルというのを使うのですが、↓のサイトはそのあたりの説明が詳しいです。

ただ、bcpだとCSVファイルの一行目に列名を出力することができないようだったので、列名を含むテキストファイルを作っておいてバッチファイルでbcpの出力データと結合させることにしました。こんな感じで。

copy /B header.csv+tmp.csv output.csv

header.csvが列名ファイル、tmp.csvが出力データで、これをoutput.csvというファイルに出力しています。/Bはバイナリ扱いにするスイッチです(原因はわかりませんがExcelで開いたときにファイル末尾に不要なコードがついてしまうので)。copyコマンドってこんな機能があったのですね。はじめて知りました。

さらに、csvをExcelで開いたときにカンマや改行を正しく認識させるために"でくくる必要がありますが、bcpでできるかわからなかったので、こちらも力技っぽく次のようにしました。

  • フィールド区切り文字を,ではなく","にする
  • 改行区切り文字を\nではなく"\n"にする
  • ファイルの最初のレコードの先頭に"がつかないので、列名ファイルの末尾に"をくっつけてしまいました。。