小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

BCPコマンドでDBアクセス!

Microsoft SQL Serverのユーティリティに、DBのデータを汎用的にコピーするBCPコマンドというものがあります。

コピーすることに関しての使用パターンはいろいろ広いのですが、とりあえず、一番必要と思われる DB to CSVテキストを紹介します。

それには、まず、TestBCP.vbsとTestBCP.fmtを用意します。

それらの内容は以下の通りで、XDBName.dbo.XtableテーブルからTestBCP.csvファイルへデータをコピーします。

VBSでBCPを使用した場合のソース(TestBCP.vbs)

Option Explicit
Dim shell, bcpcmd

	Set shell = WScript.CreateObject("WScript.Shell")

        'SQLを編集する
	bcpcmd = """select LogDate, Host, Path  from XDBName.dbo.Xtable " & _
                   """ queryout TestBCP.csv " &_
                   "-P xxxx -f TestBCP.fmt > TestBCP.log"

        'コマンドを発行
	shell.run "cmd /C ""bcp " & bcpcmd & """", 0, True
	
	Set shell = Nothing
	WScript.Quit(0)
  • Pオプションの xxxx は、DBのパスワードです。-fオプションの TestBCP.fmt は、CSVに落とすときのフォーマット指定ファイル名です。

フォーマット指定ファイルのソース(TestBCP.fmt)

8.0
3
1       SYBCHAR       0       8       ","                   1     LogDate         ""
2       SYBCHAR       0       65      ","                   2     Host            ""
3       SYBCHAR       0       512     "\r\n"                3     Path            ""

8.0はバージョン番号、3はデータのフィールド数(サンプルでは3)、
左1列目は、フィールドのシーケンス番号
左2列目は、データ型でCSVテキストではSYBCHARとなる
左3列目は、プレフィックス長でCSVテキストでは0となる
左4列目は、フィールド長で項目毎に指定
左5列目は、フィールドの終端文字でCSVの時は、『,』で、最後の項目は『\r\n』
左6列目は、とりあえず、左1列目と同じでよいみたい
左7列目は、フィールド名
左8列目は、とりあえず、『""』でよいみたい

参考 http://www.systeminfinity.co.jp/sub/tech/doc/SQLServer_BCP/BCP1.html