次の方法で共有


bcp_control

ファイルとSQL Serverの間の一括コピーに関するさまざまなコントロール パラメーターの既定の設定を変更します。

構文

  
RETCODE bcp_control (  
HDBC   
hdbc  
,  
INT   
eOption  
,  
void*   
iValue  
);  
  

引数

hdbc
一括コピーが有効な ODBC 接続ハンドルです。

eOption
次のいずれかです。

BCPABORT
既に実行中の一括コピー操作を停止します。 実行中 一括コピー操作を停止するには、別のスレッドから BCPABORT の eOption を使用してbcp_controlを呼び出します。 iValue パラメーターは無視されます。

BCPBATCH
バッチあたりの行数を指定します。 既定値は 0 です。これは、データの抽出時にテーブル内のすべての行、またはデータがSQL Serverにコピーされるときに、ユーザー データ ファイル内のすべての行を示します。 1 より小さい値を指定すると、BCPBATCH は既定値にリセットされます。

BCPDELAYREADFMT
ブール値を true に設定すると、実行時に bcp_readfmt が読み取られます。 false (既定値) の場合、bcp_readfmtはすぐにフォーマット ファイルを読み取ります。 BCPDELAYREADFMT が true で、bcp_columnsまたはbcp_setcolfmtを呼び出すと、シーケンス エラーが発生します。

BCPDELAYREADFMT, (void *)FALSE) を呼び出してbcp_writefmtした後に BCPDELAYREADFMT, (void *)TRUE) を呼び出bcp_control(hdbc,bcp_control(hdbc,すと、シーケンス エラーも発生します。

詳細については、「メタデータの検出」を参照してください。

BCPFILECP
iValue には、データ ファイルのコード ページの番号が含まれます。 1252 や 850 などのコード ページ番号を指定するか、次のいずれかの値を指定できます。

BCPFILE_ACP: ファイル内のデータは Microsoft Windows にありますか? クライアントのコード ページ。

BCPFILE_OEMCP を指定すると、ファイル内のデータには、クライアントの OEM コード ページ (既定) が使用されます。

BCPFILE_RAW: ファイル内のデータは、SQL Serverのコード ページにあります。

BCPFILEFMT
データ ファイル形式のバージョン番号を指定します。 これは、80 (SQL Server 2000)、90 (SQL Server 2005)、100 (SQL Server 2008 または SQL Server 2008 R2)、110 (SQL Server 2012)、または 120 (SQL Server 2014) です。 120 が既定値です。 このオプションは、以前のバージョンのサーバーでサポートされていた形式でデータをエクスポートおよびインポートする際に便利です。 たとえば、SQL Server 2000 サーバーのテキスト列から取得したデータを、SQL Server 2005 以降のサーバーの varchar(max) 列にインポートするには、80 を指定する必要があります。 同様に、varchar(max) 列からデータをエクスポートするときに 80 を指定すると、テキスト列が SQL Server 2000 形式で保存されるのと同じように保存され、SQL Server 2000 サーバーのテキスト列にインポートできます。

BCPFIRST
ファイルまたはテーブルにコピーする最初のデータ行を指定します。 既定値は 1 です。1 未満の値を指定すると、このオプションは既定値にリセットされます。

BCPFIRSTEX
BCP out 操作の場合は、データ ファイルにコピーするための、データベース テーブルの最初の行を指定します。

BCP in 操作の場合は、データベース テーブルにコピーするための、データ ファイルの最初の行を指定します。

iValue パラメーターは、値を含む符号付き 64 ビット整数のアドレスである必要があります。 BCPFIRSTEX に渡すことができる最大値は 2^63-1 です。

BCPFMTXML
XML 形式のフォーマット ファイルが生成されることを指定します。 既定では無効になっています。

XML フォーマット ファイルは柔軟性を高めますが、いくつかの制約が追加されています。 たとえば、以前のフォーマット ファイルで可能だったフィールドのプレフィックスとターミネータを同時に指定することはできません。

注意

XML フォーマット ファイルは、SQL ServerがSQL Server Native Clientと共にインストールされている場合にのみサポートされます。

BCPHINTS
iValue には、SQLTCHAR 文字列ポインターが含まれています。 アドレス指定される文字列には、SQL Server 一括コピー処理ヒント、または結果セットを返す Transact-SQL ステートメントを指定します。 複数の結果セットを返す Transact-SQL ステートメントを指定すると、1 つ目以外の結果セットはすべて無視されます。 一括コピー処理のヒントの詳細については、「 bcp ユーティリティ」を参照してください。

BCPKEEPIDENTITY
iValue が TRUE の場合、一括コピー関数は、ID 制約で定義されたSQL Server列に指定されたデータ値を挿入することを指定します。 入力ファイルには ID 列の値を指定する必要があります。 このオプションを設定しないと、挿入される行に対して新しい ID 値が生成されます。 ファイル内に存在する ID 列用のデータはすべて無視されます。

BCPKEEPNULLS
ファイル内の空のデータ値を SQL Server テーブルで NULL 値に変換するかどうかを指定します。 iValue が TRUE の場合、空の値は SQL Server テーブルの NULL に変換されます。 既定では、空の値は SQL Server テーブル内の列の既定値 (存在する場合) に変換されます。

BCPLAST
コピーする最後の行です。 既定では、すべての行がコピーされます。1 より小さい値を指定すると、このオプションは既定値にリセットされます。

BCPLASTEX
BCP out 操作の場合は、データ ファイルにコピーするための、データベース テーブルの最後の行を指定します。

BCP in 操作の場合は、データベース テーブルにコピーするための、データ ファイルの最後の行を指定します。

iValue パラメーターは、値を含む符号付き 64 ビット整数のアドレスである必要があります。 BCPLASTEX に渡すことができる最大値は 2^63-1 です。

BCPMAXERRS
一括コピー操作が失敗するまでに発生してもかまわないエラーの数です。 既定値は 10 です。1 未満の値を指定すると、このオプションは既定値にリセットされます。 一括コピーでは、最大 65,535 個のエラーが許容されます。 このオプションに 65,535 を超える値を設定しようとすると、65,535 が設定されます。

BCPODBC
TRUE の場合、文字形式で保存された datetime 値と smalldatetime 値で ODBC タイムスタンプエスケープ シーケンスプレフィックスとサフィックスが使用されることを指定します。 BCPODBC オプションは、BCP_OUT にのみ適用されます。

FALSE の場合、1997 年 1 月 1 日を表す datetime 値が文字列 1997-01-01 00:00:00.000 に変換されます。 TRUE の場合、 同じ datetime 値が {ts '1997-01-01 00:00:00.000'} と表されます。

BCPROWCOUNT
現在 (または最後) の BCP 操作で処理された行数を返します。

BCPTEXTFILE
TRUE の場合、データ ファイルがバイナリ ファイルではなくテキスト ファイルであることを示します。 ファイルがテキスト ファイルの場合、BCP では、データ ファイルの先頭 2 バイトに含まれる Unicode バイト マーカーをチェックして、そのファイルが Unicode 形式かどうかを判断します。

BCPUNICODEFILE
TRUE の場合、入力ファイルが Unicode ファイルであることを指定します。

iValue
指定した eOption の値です。 iValue は、64 ビット値への将来の拡張を可能にするために、void ポインターにキャストされる整数 (LONGLONG) 値です。

戻り値

SUCCEED または FAIL。

解説

この関数では、一括コピー操作のさまざまな制御パラメーターを設定します。たとえば、一括コピーが取り消されるまでに発生してもかまわないエラーの数、データ ファイルから最初にコピーする行番号や最後にコピーする行番号、バッチ サイズなどを設定します。

この関数は、SELECT の結果セットから一括コピーを行うときSQL Server SELECT ステートメントを指定するためにも使用されます。 eOption を BCPHINTS に設定し、SELECT ステートメントを含む SQLTCHAR 文字列へのポインターを持つ iValue を設定します。

これらのコントロール パラメーターは、ユーザー ファイルとSQL Server テーブルの間でコピーする場合にのみ意味があります。 コントロール パラメーターの設定は、bcp_sendrowを使用してSQL Serverにコピーされた行には影響しません。

// Variables like henv not specified.  
SQLHDBC      hdbc;  
DBINT      nRowsProcessed;  
  
// Application initiation, get an ODBC environment handle, allocate the  
// hdbc, and so on.  
...   
  
// Enable bulk copy prior to connecting on allocated hdbc.  
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,  
   SQL_IS_INTEGER);  
  
// Connect to the data source, return on error.  
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,  
   _T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Initialize bulk copy.   
if (bcp_init(hdbc, _T("address"), _T("address.add"), _T("addr.err"),  
   DB_IN) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set the number of rows per batch.   
if (bcp_control(hdbc, BCPBATCH, (void*) 1000) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set file column count.   
if (bcp_columns(hdbc, 1) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set the file format.   
if (bcp_colfmt(hdbc, 1, 0, 0, SQL_VARLEN_DATA, '\n', 1, 1)  
   == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Execute the bulk copy.   
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
printf_s("%ld rows processed by bulk copy.", nRowsProcessed);  
  

参照

一括コピー関数