3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(SQL Server 2005)データベースの内容をダンプする bcp ツール

SQL ServerMySQL のダンプのようにデータを含むクエリを作ってくれる簡単な方法はないのかと思って調査してる時に見つけたツールです。

この 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

あんまり使うことはないかもしれませんが、覚えておくと便利なツールかもしれません。