Share via


IBCPSession::BCPInit (OLE DB)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

OLE DB ドライバーのダウンロード

一括コピー構造を初期化し、エラー チェックを実行して、データ ファイルとフォーマット ファイルの名前が正しいことを確認します。その後、それらのファイルを開きます。

構文

  
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 結果セット内の列のデータ型です。 データ型は、OLE DB Driver for SQL Server ヘッダー ファイル (msoledbsql.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 つ以上の引数が正しく指定されませんでした。 たとえば、無効なファイル名が指定されました。

参照

IBCPSession (OLE DB)
一括コピー操作の実行