次の方法で共有


bcp_control

適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

ファイルと 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 bcp_control(hdbc,呼び出した後, (void *)FALSE) BCPDELAYREADFMT, (void *)TRUE) bcp_writefmtbcp_control(hdbc,呼び出すと、シーケンス エラーも発生します。

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

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

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

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

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

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

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

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

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

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

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

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

Note

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 オプションは、DB_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。

解説

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

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

これらの制御パラメーターは、ユーザー ファイルと 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);  
  

参照

一括コピー関数