2016年12月22日木曜日

【SQL Server】BCPコマンドを利用したデータベースデータのインポート/エクスポート

bcpを使ったデータベースのインポート+エキスポートについて、調べたのでまとめてみました。

1、構文
bcp ユーティリティは、ユーザーが指定した形式で、データを Microsoft® SQL Server™ 2000 とデータ ファイルとの間でコピーします。

bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
     {in | out | queryout | format} data_file
     [-m max_errors] [-f format_file] [-e err_file]
     [-F first_row] [-L last_row] [-b batch_size]
     [-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
     [-q] [-C code_page] [-t field_term] [-r row_term]
     [-i input_file] [-o output_file] [-a packet_size]
     [-S server_name[\instance_name]] [-U login_id] [-P password]
     [-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"]

【引数】
database_name データベースの名前
owner                テーブルの名前
table_name        コピー先(元)のテーブルの名前
query                  結果セットを返す Transact-SQLのクエリ
                         ※クエリ全体を二重引用符で囲んでください。クエリからデータを一括コピーする場合には、queryout も指定します。

in | out | queryout | format 一括コピーする方向
 ※in は、ファイルからデータベース テーブルまたはビューにコピーします。out は、データベース テーブルまたはビューからファイルにコピーします。queryout は、クエリからデータの一括コピーを行う場合に指定します。format オプションは、指定したオプション (-n、-c、-w、-6、-N のいずれか) とテーブルまたはビューの区切り記号に基づいてフォーマット ファイルを作成します。format を使用する場合、-f オプションも指定する必要があります。
data_file          コピー先(元)のデータ ファイルのフル パス

-n                     データのネイティブ (データベース) データ型を使用して一括コピー操作を実行
-c                     文字データ型を使用して一括コピー操作を実行

-S server_name[\instance_name] 接続先の SQL Server のインスタンスを指定
-U login_id                                   SQL Server への接続に使用されるログイン ID
-P password                                  ログイン ID のパスワード

 2、説明
bcpを利用し、以下のようなことができる。
なお、コマンドプロンプトから実行することができます(batファイルを作成して、クリックして実行します)。
(1) 指定したテーブルのデータをテキストファイルに出力する。
【構文】
       bcp データベース名.所有者.テーブル名 out "出力パス" -c -S サーバ名 -U ユーザID -P パスワード
【例】
masterデータベースのtestテーブルのデータを"C:\test.txt"に全件出力する。
   bcp master..test out "C:\test.txt" -c -S SrvAsa -U asa -P aaa

(2) 指定したクエリで取得したデータをファイルに出力する。
【構文】
       bcp "SQL文" queryout "出力パス" -n -S サーバ名 -U ユーザID -P パスワード
【例】
masterデータベースのtestテーブルのデータをクエリを使って抽出して、"C:\test.bcp"に出力する。
       bcp "SELECT * from master..test where SystemDay between 20130401 and 20161130" queryout
           "C:\test.bcp" -n -S SrvAsa  -U asa -P aaa


(3) 指定したファイルのデータを指定したテーブルに取り込む。
【構文】
      bcp データベース名.所有者.テーブル名 in "入力パス" -n -S サーバ名(インスタンス名) -U ユーザID -P パスワード
【例】
テキストファイル("C:\test.bcp")のデータを指定したテーブル(masterデータベースのtestテーブル)に取り込む
        bcp master..systypes in "C:\test.bcp" -n -S SrvAsa -U asa -P aaa

実作業としては、(2),(3)を利用して、(2)と(3)の間でtruncate(テーブルから全ての行を削除)を行い、データベースの再作成を行たりします。

【参考URL】
http://blog.livedoor.jp/akf0/archives/51354837.html
https://msdn.microsoft.com/ja-jp/library/ms162802.aspx
http://dalmore.blog7.fc2.com/blog-entry-17.html
https://msdn.microsoft.com/ja-jp/library/aa174646(SQL.80).aspx

0 件のコメント:

コメントを投稿