(SQL Server 2005)データベースの内容をダンプする bcp ツール
SQL Server で MySQL のダンプのようにデータを含むクエリを作ってくれる簡単な方法はないのかと思って調査してる時に見つけたツールです。
この bcp ツールというのは SQL Server に付属しており、テーブルデータのエクスポートやインポートが簡単にできるようです。
といっても、データがタブ区切りでエクスポートもしくはインポートできるだけなので、MySQL のようなクエリ付ではありません。
(しかも、テーブル単位でしかできないのがちょっと不便ですが。。)
bcp コマンドの詳細はMSDN:bcp ユーティリティを参照。
コマンドのオプションで -c,-w と -n,-N があるんですが、-c,-w だとテキスト形式で落とすので可読性はありますが、そのデータをインポートするときに問題が発生するかもしれません。-n,-N はネイティブデータ型を使用するので吐き出したデータをインポートする可能性があるならこっちの方が無難でしょう。
-c と -w , -n と -N の違いはUnicode文字を使用するかどうかなので、-N でネイティブ型のUnicode文字使用するのがお勧めです。
簡単な使い方は【Microsoft SQL Server】 BCPユーティリティの使用法や[SQLServer]BCPユーティリティ とはで紹介されてます。
インポートの際には一旦今のデータを消しておかないと一意制約かけてる列ではエラーになってしまいます。
一応下記のような感じで軽く試してみました。
ネイティブデータ型(Unicode)で出力
C:\Users\TestUser>bcp TestDB.dbo.CustomerTable out c:\testest.txt -N -S hostname\SQL2005DEV -T
コピーを開始しています...
15 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計 : 1 平均 : (15000.00 行/秒)
テキスト型で出力
C:\Users\TestUser>bcp TestDB.dbo.CustomerTable out c:\testest_char.txt -c -S hostname\SQL2005DEV -T
コピーを開始しています...
15 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計 : 1 平均 : (15000.00 行/秒)
出力したデータをインポート(データを消さずにインポートしようとしたのでユニーク制約に引っ掛かってしまった)
C:\Users\TestUser>bcp TestDB.dbo.CustomerTable in c:\testest.txt -n -S hostname\SQL2005DEV -U sa -P passwd -E
コピーを開始しています...
SQLState = 23000, NativeError = 2627
Error = [Microsoft][SQL Native Client][SQL Server]制約 'aaaaaCustomerTable_PK' の PRIMARY KEY 違反。オブジェクト 'dbo.CustomerTable' には重複したキー
を挿入できません。
SQLState = 01000, NativeError = 3621
Warning = [Microsoft][SQL Native Client][SQL Server]ステートメントは終了されました。
BCP コピー in が失敗しました
一旦テーブルのデータを消してからインポートするとうまくいった。
C:\Users\TestUser>bcp TestDB.dbo.CustomerTable in c:\testest.txt -n -S hostname\SQL2005DEV -U sa -P passwd -E
コピーを開始しています...
15 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計 : 1 平均 : (15000.00 行/秒)
-c(テキスト形式)でエクスポートしたときはこんなファイルになります。
31真実 太郎シンジツ タロウ19760520
62真実 花子シンジツ ハナコ19811114
106岸川 秀樹キシカワ ヒデキ19690619
117鈴本 伊一郎スズモト イイチロウ19560907
あんまり使うことはないかもしれませんが、覚えておくと便利なツールかもしれません。