トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

MSSQL/BcpUtil

INDEX

Microsoft SQL Server BCP ユーティリティ

bcp ユーティリティは、ユーザーが指定した形式で、データファイルとMicrosoft SQL Serverとの間で、双方向のデータのやりとり(コピー)を行います。

主な使用用途としては

  • SQL Server のデータを他のプログラムの入力データにする。
  • 他のプログラムの出力データを SQL Server のデータにする。
  • SQL Server を含む別のデータベースとのデータのやりとりを行う。

 コマンド構文

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
テーブルまたはビューの所有者の名前です。省略した場合は、デフォルトの dbo になります。
table_name
コピー元(out オプション時)もしくはコピー先(in オプション時)のテーブルの名前です。
view_name
コピー元(out オプション時)もしくはコピー先(in オプション時)のビューの名前です。コピー先として指定する場合、更新可能なビューである必要があります。
query
結果セットを返す Transact-SQLのクエリです。
in | out | queryout | format
一括コピーする方向を指定します。
  • in は、ファイルからデータベースにコピーします。
  • out は、データベースからファイルにコピーします。
  • queryout は、クエリからデータの一括コピーを行う場合に指定します。
  • format は、フォーマットファイルを作成します。-f オプションも指定する必要があります。
data_file
コピー先(in オプション時)もしくはコピー元(out オプション時)のデータファイルの名前です。
-f format_file
使用するフォーマットファイルの名前を指定します。指定がない場合、起動時に必要な情報を問い合わせます。また、その結果を保存することも出来ます。
-S server_name[\instance_name]
接続先の SQL Server のインスタンスを指定します。省略した場合は、ローカルの規定のインスタンスに接続します。リモートに接続する場合は、サーバ名、必要であればインスタンス名も指定します。
-U login_id
SQL Server への接続に使用されるログイン ID を指定します。
-P password
ログイン ID のパスワードを指定します。省略した場合は、起動時に問い合わせます。また、コマンド引数の最後にパスワードなしで使用すると、デフォルトのパスワード (NULL) が使用されます。
-T
Windows 認証 (統合セキュリティを使用したセキュリティ接続)で接続します。
-d database_name
接続先のデータベースを指定します。

フォーマットファイル

対話モードを使用してデータを一括コピーする場合、保存形式、プレフィックス長、フィールド長、およびフィールドと行の終端文字について情報の保存を求めるメッセージが bcp ユーティリティによって表示されます。データ ファイルの各フィールドに対して形式情報を保存するために使用するファイルは、フォーマット ファイルと呼びます。

フォーマット ファイルは特定の構成を持つタブ区切りされたテキスト ファイルです。

 フォーマットファイルの書式

8.0
5
1  SQLCHAR  0   4    "\t"  1  pub_id    Japanese_CI_AS
2  SQLCHAR  0  40    "\t"  2  pub_name  Japanese_CI_AS
3  SQLCHAR  0  20    "\t"  3  city      Japanese_CI_AS
4  SQLCHAR  0   2    "\t"  4  state     Japanese_CI_AS
5  SQLCHAR  0  30  "\r\n"  5  country   Japanese_CI_AS

各行の内容は以下の様になる。

  • 1行目は、「bcp バージョン番号」です。SQL Server 2000 は、8.0 です。
  • 2行目は、データファイルの「フィールド数」です。
  • 3行目以降は、各フィールドの定義です。

フィールドの定義は以下の様なる。

  • 1番目は、データファイルの「フィールドの順序」です。最初が1になり、以降は順番に番号が振られます。
  • 2番目は、データファイルの「データ型」です。
  • 3番目は、「プレフィックス長」です。指定できる値は、0,1,2,4 です。
  • 4番目は、データファイルの「データ長」です。フィールドに格納されるデータ型の最大バイト数を指定します。
  • 5番目は、フォールドを区切る「終端文字」です。共通終端文字には、カンマ (,)、タブ (\t)、および行末 (\r\n) があります。
  • 6番目は、「サーバーの列の順序」です。
  • 7番目は、「サーバーの列名」です。実際の列名である必要はないが、空白は指定できない。
  • 8番目は、一括コピーデータファイルに文字および Unicode データを格納するときに使用する「照合順序」です。

 対話モードでフォーマットファイルを作成する

bcp <table_name> format NUL -S <server_name> -U <username> -P <password> -f <format_file_name>

簡単なインポート・エクスポート

BCP コマンドを利用して、簡単にテーブルデータのエクスポートおよびインポートを行う。規定では各フィールドはタブで区切られる。

エクスポートされるデータは、DATETIME型はCONVERT関数のスタイル値 121 (FORMAT関数の書式指定文字列 yyyy-MM-dd hh:mm:ss.fff)、長さ0の文字列はヌル文字(\0)といった書式で出力される。

 エクスポート

bcp <table_name> out <data_filename> -S <server_name> -U <username> -P <password>

 条件を指定してエクスポート

bcp "SELECT * FROM <table_name> WHERE <conditions>" queryout <data_filename>
 -S <server_name> -U <username> -P <password>

 インポート

一意性約違反となるデータがある場合にどのようになるかは未確認。

bcp <table_name> in <data_filename> -S <server_name> -U <username> -P <password>

最終更新時間:2024年07月19日 18時38分55秒 指摘や意見などあればSandBoxのBBSへ。