INDEX
Microsoft SQL Server BCP ユーティリティ
bcp ユーティリティは、ユーザーが指定した形式で、データファイルとMicrosoft SQL Serverとの間で、双方向のデータのやりとり(コピー)を行います。
主な使用用途としては
- SQL Server のデータを他のプログラムの入力データにする。
- 他のプログラムの出力データを SQL Server のデータにする。
- SQL Server を含む別のデータベースとのデータのやりとりを行う。
bcp ユーティリティ (MSDN Library Japan)フォーマット ファイルの使用 (MSDN Library Japan)
- bcp ユーティリティ - SQL Server | Microsoft Learn
コマンド構文
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 ユーティリティによって表示されます。データ ファイルの各フィールドに対して形式情報を保存するために使用するファイルは、フォーマット ファイルと呼びます。
フォーマット ファイルは特定の構成を持つタブ区切りされたテキスト ファイルです。
- ファイル保存形式 (MSDN Library Japan)
- プレフィックス長 (MSDN Library Japan)
- フィールド長 (MSDN Library Japan)
- フィールド終端文字 (MSDN Library Japan)
フォーマットファイルの書式
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へ。