忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

SQL-Serverのユーティリティ(BCP)を利用したテーブルへのインポート・エキスポート
SQL-Serverのテーブルの内容を簡単にインポート・エキスポートできる、ユーティリティ(BCP)の忘備録です。

BCPはコマンドラインで使用するEXEファイルで、MSSQLをインストールした時点でユーティリティとして "C:\Program Files\Microsoft SQL Server\90\Tools\Binn"の様なディレクトリに存在するはずです。
パスも通っているはずですから、DOS窓から「BCP」を実行すれば動作するはずです。
(引数無しで実行するとヘルプが表示されます。以下を参照)
C:\>bcp
使用法: bcp {dbtable | query} {in | out | queryout | format} datafile
  [-m 最大エラー数]        [-f フォーマット ファイル]   [-e エラー ファイル]
  [-F 先頭行]              [-L 最終行]                  [-b バッチ サイズ]
  [-n ネイティブ型]        [-c 文字型]                  [-w UNICODE 文字型]
  [-N text 以外のネイティブ型を保持] [-V ファイル フォーマットのバージョン] [-q
引用符で囲まれた識別子]
  [-C コード ページ指定子] [-t フィールド ターミネータ] [-r 行ターミネータ]
  [-i 入力ファイル]        [-o 出力ファイル]            [-a パケット サイズ]
  [-S サーバー名]          [-U ユーザー名]              [-P パスワード]
  [-T 信頼関係接続]        [-v バージョン]              [-R 地域別設定有効]
  [-k NULL 値を保持]       [-E ID 値を保持]
  [-h "読み込みヒント"]    [-x XML フォーマット ファイルを生成]
各種の引数があって、いろいろな使い方ができますが、私が基本的に使っている方法を記します。
尚、実行はMSSQLがインストールされているサーバ上で実行しています。
■テーブルをテキストファイルに出力する

テスト用のデータベースである「TEST」と、そのDB内のテスト用テーブル「TABLE_A」の内容全てを テキストファイル「table_a.txt」に出力する方法です。
C:\>bcp TEST.dbo.TABLE_A out "table_a.txt" -c -S localhost\SQLEXPRESS -T

コピーを開始しています...

2 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 1      平均 : (2000.00 行/秒)
出力結果はテーブルのカラムの区切り記号としてタブ文字が使われます。また、文字コードはShift-JISです。
(尚、実行はCドライブのルートで実行しています。) 最後の引数の「-T」は、Windows認証の指定ですが、SQL Server認証の場合は「-T」の代わりに「-U」「-P」を用います。
================================================================================
-U [ユーザ名] -P [パスワード]
================================================================================

■SQLの結果をテキストファイルに出力する

上記の説明で使用したテーブル「TABLE_A」を対象としたSQL文の結果をテキストファイル「table_b.txt」に出力する方法です。
C:\>bcp "SELECT * FROM TEST.dbo.TABLE_A ORDER BY ID" queryout "table_b.txt" -c -Slocalhost\SQLEXPRESS -T

コピーを開始しています...

2 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 1      平均 : (2000.00 行/秒)
最初のコマンドの引数と異なるところは、SQL文を指定するところと、処理区分を「queryout」とすることです。
出力結果は、「table_a.txt」とほぼ同じものが出力されます。
■テーブルにテキストファイルをインポートする

上記の説明で使用したテーブル「TABLE_A」にテキストファイル「table_c.txt」の内容をインポートする方法です。
C:\>bcp TEST.dbo.TABLE_A in "table_c.txt" -c -Slocalhost\SQLEXPRESS -T

コピーを開始しています...

2 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 63     平均 : (31.75 行/秒)
テキストファイルの内容は、インポートされるテーブルの構造と同じである必要があります。
また、キーの重複があればエラーが発生し、全てのインポート処理は破棄されます。
C:\>bcp TEST.dbo.TABLE_A in "table_c.txt" -c -Slocalhost\SQLEXPRESS -T

コピーを開始しています...
SQLState = 23000, NativeError = 2627
Error = [Microsoft][SQL Native Client][SQL Server]制約 'PK_TABLE_A' の PRIMARY K
EY 違反。オブジェクト 'dbo.TABLE_A' には重複したキーを挿入できません。
SQLState = 01000, NativeError = 3621
Warning = [Microsoft][SQL Native Client][SQL Server]ステートメントは終了されまし
た。

BCP コピー in が失敗しました
=====
2013/02/12:の時の情報











PR

コメント

コメントを書く