!!!Microsoft SQL Server BCP ユーティリティ {{category SQL Server,nolink}}bcp ユーティリティは、ユーザーが指定した形式で、データファイルとMicrosoft SQL Serverとの間で、双方向のデータのやりとり(コピー)を行います。 主な使用用途としては *SQL Server のデータを他のプログラムの入力データにする。 *他のプログラムの出力データを SQL Server のデータにする。 *SQL Server を含む別のデータベースとのデータのやりとりを行う。 *==bcp ユーティリティ (MSDN Library Japan)== **==http://msdn.microsoft.com/library/ja/coprompt/cp_bcp_61et.asp== **==http://msdn.microsoft.com/ja-jp/library/ms162802.aspx== *==フォーマット ファイルの使用 (MSDN Library Japan)== **==http://msdn.microsoft.com/library/ja/adminsql/ad_impt_bcp_9yat.asp== * bcp ユーティリティ - SQL Server | Microsoft Learn **https://learn.microsoft.com/ja-jp/sql/tools/bcp-utility !!コマンド構文 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) **http://msdn.microsoft.com/library/ja/adminsql/ad_impt_bcp_8739.asp *プレフィックス長 (MSDN Library Japan) **http://msdn.microsoft.com/library/ja/adminsql/ad_impt_bcp_8739.asp *フィールド長 (MSDN Library Japan) **http://msdn.microsoft.com/library/ja/adminsql/ad_impt_bcp_8739.asp *フィールド終端文字 (MSDN Library Japan) **http://msdn.microsoft.com/library/ja/adminsql/ad_impt_bcp_8739.asp !!フォーマットファイルの書式 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 format NUL -S -U -P -f !!!簡単なインポート・エクスポート BCP コマンドを利用して、簡単にテーブルデータのエクスポートおよびインポートを行う。規定では各フィールドはタブで区切られる。 エクスポートされるデータは、DATETIME型はCONVERT関数のスタイル値 121 (FORMAT関数の書式指定文字列 yyyy-MM-dd hh:mm:ss.fff)、長さ0の文字列はヌル文字(\0)といった書式で出力される。 !!エクスポート bcp out -S -U -P !!条件を指定してエクスポート bcp "SELECT * FROM WHERE " queryout -S -U -P !!インポート 一意性約違反となるデータがある場合にどのようになるかは未確認。 bcp in -S -U -P