【Microsoft SQL Server】 BCPユーティリティの使用法を参考に SQL server のテーブルをCSVファイルにダンプしました。
まず、テーブルのフォーマットを取得します。
>bcp DBNAME.dbo.tablename out c:\c\db\tablename.txt -S HOSTNAME -U username -P password フィールド cd [int] のファイル ストレージ型を入力してくださいint フィールド cd [0] のプレフィックス長を入力してください0 フィールド ターミネータ [none] を入力してください フィールド hoge [int] のファイル ストレージ型を入力してくださいint フィールド hoge [0] のプレフィックス長を入力してください0 フィールド ターミネータ [none] を入力してくださいnone フィールド name [nvarchar] のファイル ストレージ型を入力してくださいnvarchar フィールド name [1] のプレフィックス長を入力してください1 フィールド ターミネータ [none] を入力してください フィールド cd [int] のファイル ストレージ型を入力してくださいint フィールド cd [0] のプレフィックス長を入力してください0 フィールド ターミネータ [none] を入力してください フィールド memo [nvarchar] のファイル ストレージ型を入力してくださいnvarchar フィールド memo [1] のプレフィックス長を入力してください1 フィールド ターミネータ [none] を入力してください このフォーマット情報をファイルに保存しますか? [y/n]y ホスト ファイル名 [bcp.fmt]tablename.fmt コピーを開始しています... SQLState = 22005, NativeError = 0 Error = [Microsoft][SQL Native Client]キャストした文字コードが正しくありません。 200 行コピーされました。 ネットワーク パケット サイズ (バイト): 4096 クロック タイム (ミリ秒) 合計 : 1 平均 : (200000.00 行/秒)
最後に指定した tablename.fmt が出来ます。
9.0 5 1 SQLINT 0 4 "" 1 cd "" 2 SQLINT 0 4 "none" 2 hoge "" 3 SQLNUMERIC 1 19 "" 3 name Japanese_CI_AS 4 SQLINT 0 4 "" 4 cd "" 5 SQLNUMERIC 1 19 "" 5 memo Japanese_CI_AS
fmt ファイルの意味は以下のようなものなのだそうです。
9.0 --- バージョン 5 --- フィールド数 1.データファイルのフィールド番号 2.データ型 3.プレフィックス長 4.フィールドの長さ 5.フィールドの終端文字 6.SQL Serverデータベース内でのフィールド番号 7.SQL Serverテーブルのフィールド名(実際の名前でなくてもOK、空白 NG) 8.行の照合順序
1.データ型が全て『SYBCHAR』
2.プレフィックス長はゼロ
3.フィールドの区切りに『,』を終端文字に『\r\n』を指定します。
9.0 5 1 SYBCHAR 0 4 "," 1 cd "" 2 SYBCHAR 0 4 "," 2 hoge "" 3 SYBCHAR 0 19 "," 3 name Japanese_CI_AS 4 SYBCHAR 0 4 "," 4 cd "" 5 SYBCHAR 0 19 "\r\n" 5 memo Japanese_CI_AS
>bcp DBNAME.dbo.tablename out c:\c\db\tablename.csv -f c:\c\db\tablename.fmt -S HOSTNAME -U username -P password コピーを開始しています... 201 行コピーされました。 ネットワーク パケット サイズ (バイト): 4096 クロック タイム (ミリ秒) 合計 : 15 平均 : (13400.00 行/秒)
tablename.csv が作成されます。