IBCPSession::BCPInit (ネイティブ クライアント OLE DB プロバイダー)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC と略されることがよくあります) は、SQL Server 2022 (16.x) と SQL Server Management Studio 19 (SSMS) から削除されました。 SQL Server Native Client OLE DB プロバイダー (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) はどちらも、新しい開発には推奨されません。 今後は、新しい Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server に切り替えてください。
一括コピー構造を初期化し、エラー チェックを実行して、データ ファイルとフォーマット ファイルの名前が正しいことを確認します。その後、それらのファイルを開きます。
構文
HRESULT BCPInit(
const wchar_t *pwszTable,
const wchar_t *pwszDataFile,
const wchar_t *pwszErrorFile,
int eDirection);
解説
BCPInit メソッドは、他のすべての一括コピー メソッドの前に呼び出す必要があります。 BCPInit メソッドにより、ワークステーションと SQL Server との間のデータの一括コピーに必要な初期化が実行されます。
BCPInit メソッドは、データ ファイルではなく、データベースのコピー元テーブルまたはコピー先テーブルの構造を調べます。 また、データベース テーブル、ビュー、または SELECT 結果セット内の各列に基づいてデータ ファイルのデータ形式値を指定します。 このデータ形式値には、各列のデータ型、長さや NULL のインジケーターとターミネータのバイト文字列がデータ内に存在するかどうか、および固定長データ型の幅の指定などが含まれます。 BCPInit メソッドでは、これらの値を次のように設定します。
指定するデータ型は、データベース テーブル、ビュー、または SELECT 結果セット内の列のデータ型です。 データ型は、SQL Server Native Client ヘッダー ファイル (sqlncli.h) で指定された SQL Server ネイティブ データ型によって列挙されます。 列挙される値の形式は、BCP_TYPE_XXX です。 データはそのコンピューターの形式で表されます。 つまり、integer データ型の列のデータは、データ ファイルを作成したコンピューターに基づいて、ビッグ エンディアンまたはリトル エンディアンの 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 メソッドを使用します。
テーブルにインデックスが含まれていない場合は、データベース オプション select into/bulkcopy を設定することにより、SQL Server への一括コピーを最適化できます。
引数
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 つ以上の引数が正しく指定されませんでした。 たとえば、無効なファイル名が指定されました。