一括コピー構造を初期化し、エラー チェックを実行し、データファイル名とフォーマット ファイル名が正しいことを確認してから開きます。
構文
HRESULT BCPInit(
const wchar_t *pwszTable,
const wchar_t *pwszDataFile,
const wchar_t *pwszErrorFile,
inteDirection);
注釈
BCPInit メソッドは、他の一括コピー メソッドの前に呼び出す必要があります。 BCPInit メソッドは、ワークステーションと SQL Server の間のデータの一括コピーに必要な初期化を実行します。
BCPInit メソッドは、データ ファイルではなく、データベース ソースまたはターゲット テーブルの構造を調べます。 データベース テーブル、ビュー、または SELECT 結果セットの各列に基づいて、データ ファイルのデータ形式の値を指定します。 この仕様には、各列のデータ型、データ内の長さまたは null インジケーターとターミネータバイト文字列の有無、固定長データ型の幅が含まれます。 BCPInit メソッドは、これらの値を次のように設定します。
指定するデータ型は、データベース テーブル、ビュー、または SELECT 結果セット内の列のデータ型です。 データ型は、SQL Server Native Client ヘッダー ファイル (sqlncli.h) で指定された SQL Server ネイティブ データ型によって列挙されます。 これらの値は、BCP_TYPE_XXXのパターンにあります。 データは、そのコンピューター形式で表されます。 つまり、整数データ型の列からのデータは、データ ファイルを作成したコンピューターに基づくビッグ エンディアンまたはリトル エンディアンである 4 バイト シーケンスによって表されます。
データベースのデータ型が固定長の場合は、データ ファイルのデータも固定長になります。 データを処理する一括コピー メソッド ( IBCPSession::BCPExec など) は、データ ファイル内のデータの長さが、データベース テーブル、ビュー、または SELECT 列リストで指定されたデータの長さと同じであるデータ行を解析します。 たとえば、
char(13)
として定義されたデータベース列のデータは、ファイル内のデータ行ごとに 13 文字で表される必要があります。 データベース列で NULL 値を許容する場合は、固定長データにプレフィックスとして NULL インジケーターを付けることができます。SQL Server にデータをコピーする場合、データ ファイルにはデータベース テーブル内の各列のデータが必要です。 SQL Server からデータをコピーすると、データベース テーブル、ビュー、または SELECT 結果セット内のすべての列のデータがデータ ファイルにコピーされます。
データを SQL Server にコピーする場合、データ ファイル内の列の序数位置は、データベース テーブル内の列の序数位置と同じである必要があります。 SQL Server からデータをコピーする場合、 BCPExec メソッドは、データベース テーブル内の列の序数位置に基づいてデータを配置します。
データベース のデータ型が可変長 (
varbinary(22)
など) の場合、またはデータベース列に null 値を含めることができる場合、データ ファイル内のデータの先頭には長さ/null インジケーターが付きます。 インジケーターの幅は、データ型と一括コピーのバージョンによって異なります。 IBCPSession::BCPControl メソッド オプション BCP_OPTION_FILEFMTは、以前の一括コピー データ ファイルと、データ内のインジケーターの幅が予想よりも狭い場合を示すことによって、新しいバージョンの SQL Server を実行しているサーバーとの間の互換性を提供します。
注
データ ファイルに指定されたデータ形式の値を変更するには、 IBCPSession::BCPColumns メソッドと IBCPSession::BCPColFmt メソッドを使用します。
SQL Server への一括コピーは、データベース オプション の select into/bulkcopy を設定することで、インデックスを含まないテーブルに最適化できます。
論争
pwszTable[in]
コピー先またはコピー先のデータベース テーブルの名前。 名前には、データベース名または所有者名を含めることができます。 たとえば、"pubs.username.titles"、"pubs..titles"、"username.titles"
eDirection 引数が BCP_DIRECTION_OUT に設定されている場合、pwszTable 引数にはデータベース ビューの名前を指定できます。
引数 eDirection を BCP_DIRECTION_OUTに設定し、BCPExec メソッドを呼び出す前に BCPControl メソッドを使用して SELECT ステートメントを指定する場合は、pwszTable 引数を NULL に設定する必要があります。
pwszDataFile[in]
コピーするユーザー ファイルの名前。
pwszErrorFile[in]
進行状況メッセージ、エラー メッセージ、およびユーザー ファイルからテーブルにコピーできなかった行のコピーで埋めるエラー ファイルの名前。
pwszErrorFile 引数が NULL に設定されている場合、エラー ファイルは使用されません。
eDirection[in]
コピー操作の方向 (BCP_DIRECTION_INまたはBCP_DIRECTION _OUT)。 BCP_DIRECTION _INは、ユーザー ファイルからデータベース テーブルへのコピーを示します。BCP_DIRECTION _OUTは、データベース テーブルからユーザー ファイルへのコピーを示します。
リターン コードの値
S_OK
メソッドは成功しました。
E_FAIL
プロバイダー固有のエラーが発生しました。 詳細については、 ISQLServerErrorInfo インターフェイスを使用してください。
E_OUTOFMEMORY
メモリ不足エラー。
無効な引数エラー (E_INVALIDARG)
1 つ以上の引数が正しく指定されていません。 たとえば、無効なファイル名が指定されました。