データ ファイルとフォーマット ファイルの使用

最も単純な一括コピー プログラムでは次の操作を実行します。

  1. bcp_init を呼び出して、テーブルまたはビューからデータ ファイルへの一括コピー出力を指定します (BCP_OUT を設定します)。

  2. bcp_exec を呼び出して一括コピー操作を実行します。

データ ファイルはネイティブ モードで作成されるので、テーブルやビューのすべての列から取得したデータは、データベースと同じ形式でデータ ファイルに格納されます。その後、同様の手順を使用して、このデータ ファイルをサーバーに一括コピーできます。ただし、DB_OUT ではなく DB_IN を設定します。この操作は、コピー元のテーブルとコピー先のテーブルの構造が厳密に同じ場合にのみ機能します。また、/n (ネイティブ モード) スイッチを使用することにより、コピーしたデータ ファイルを bcp ユーティリティの入力に使用することもできます。

テーブルやビューから直接取得するのではなく、Transact-SQL ステートメントの結果セットを一括コピー出力するには、次の操作を実行します。

  1. bcp_init を呼び出して一括コピー出力を指定しますが、テーブル名には NULL を指定します。

  2. eOption に BCPHINTS を設定し、iValue に Transact-SQL ステートメントを保持する SQLTCHAR 文字列へのポインタを設定して、bcp_control を呼び出します。

  3. bcp_exec を呼び出して一括コピー操作を実行します。

結果セットを生成するステートメントであればどのような Transact-SQL ステートメントも使用できます。作成されるデータ ファイルには Transact-SQL ステートメントの最初の結果セットが格納されます。Transact-SQL ステートメントで複数の結果セットが生成される場合 (COMPUTE または COMPUTE BY が含まれている場合など)、一括コピーでは、最初の結果セットよりも後にある結果セットは無視されます。

テーブルの形式と異なる形式で列データが格納されるデータ ファイルを作成するには、bcp_columns を呼び出して変更する列数を指定した後、形式を変更する列ごとに bcp_colfmt を呼び出します。この処理は、bcp_init を呼び出した後、bcp_exec を呼び出す前に行います。bcp_colfmt では、列のデータをデータ ファイルに格納する際の形式を指定します。一括コピー入力または一括コピー出力時に、この処理を利用できます。また、bcp_colfmt を使用して行ターミネータと列ターミネータを設定することもできます。たとえば、データにタブ文字が含まれていなければ、bcp_colfmt を使用して、タブ文字を各列のターミネータとして設定することにより、タブ区切りのファイルを作成できます。

bcp_colfmt を使用した一括コピー出力では、最後の bcp_colfmt を呼び出した後で bcp_writefmt を呼び出すことにより、作成するデータ ファイルの形式を記述したフォーマット ファイルを簡単に作成できます。

フォーマット ファイルの記述に従ってデータ ファイルから一括コピー入力する場合は、bcp_init を呼び出した後、bcp_exec を呼び出す前に bcp_readfmt を呼び出し、フォーマット ファイルを読み取ります。

bcp_control 関数は、データ ファイルから SQL Server への一括コピー時のオプションの一部を制御します。bcp_control では、操作を中止するまでのエラーの最大数、ファイルの一括コピー開始行、一括コピー停止行、バッチ サイズなどのオプションを設定します。