SQL-Serverのテーブルの内容を簡単にインポート・エキスポートできる、ユーティリティ(BCP)の忘備録です。
BCPはコマンドラインで使用するEXEファイルで、MSSQLをインストールした時点でユーティリティとして "C:\Program Files\Microsoft SQL Server\90\Tools\Binn"の様なディレクトリに存在するはずです。
パスも通っているはずですから、DOS窓から「BCP」を実行すれば動作するはずです。
(引数無しで実行するとヘルプが表示されます。以下を参照)
尚、実行はMSSQLがインストールされているサーバ上で実行しています。
■テーブルをテキストファイルに出力する
テスト用のデータベースである「TEST」と、そのDB内のテスト用テーブル「TABLE_A」の内容全てを テキストファイル「table_a.txt」に出力する方法です。
(尚、実行はCドライブのルートで実行しています。) 最後の引数の「-T」は、Windows認証の指定ですが、SQL Server認証の場合は「-T」の代わりに「-U」「-P」を用います。
================================================================================
-U [ユーザ名] -P [パスワード]
================================================================================
■SQLの結果をテキストファイルに出力する
上記の説明で使用したテーブル「TABLE_A」を対象としたSQL文の結果をテキストファイル「table_b.txt」に出力する方法です。
出力結果は、「table_a.txt」とほぼ同じものが出力されます。
■テーブルにテキストファイルをインポートする
上記の説明で使用したテーブル「TABLE_A」にテキストファイル「table_c.txt」の内容をインポートする方法です。
また、キーの重複があればエラーが発生し、全てのインポート処理は破棄されます。
2013/02/12:の時の情報
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
コメント