次の方法で共有


bcp_exec

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

データベース テーブルとユーザー ファイル間でデータの完全な一括コピーを実行します。

構文

  
RETCODE bcp_exec (  
        HDBC hdbc,  
        LPDBINT pnRowsProcessed);  

引数

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

pnRowsProcessed
DBINT へのポインターです。 bcp_exec関数は、この DBINT に正常にコピーされた行数を入力します。 pnRowsProcessed が NULL の場合、bcp_execでは無視されます。

返品

SUCCEED、SUCCEED_ASYNC、または FAIL のいずれかを返します。 すべての行がコピーされた場合、 bcp_exec 関数は SUCCEED を返します。 非同期一括コピー操作がまだ未処理の場合、bcp_exec はSUCCEED_ASYNCを返します。 bcp_exec は、完全なエラーが発生した場合、またはエラーを生成する行の数が、 bcp_controlを使用して BCPMAXERRS に指定された値に達した場合に FAIL を返します。 BCPMAXERRS の既定値は 10 です。 BCPMAXERRS オプションの影響を受けるのは、データ ファイルの行 (サーバーに送信される行以外) を読み取る間にプロバイダーで検出される構文エラーのみです。 ある行でエラーが検出されると、サーバーはバッチを中止します。 正常にコピーされた行数については、 pnRowsProcessed パラメーターを確認します。

解説

この関数は、bcp_initeDirection パラメーターの値に応じて、ユーザー ファイルからデータベース テーブルまたはその逆にデータをコピーします。

bcp_execを呼び出す前に、有効なユーザー ファイル名でbcp_initを呼び出します。 この操作を行わないと、エラーが発生します。

bcp_exec は、任意の期間未処理である可能性が高い唯一の一括コピー関数です。 そのため、非同期モードをサポートする唯一の一括コピー関数でもあります。 非同期モードを設定するには、 SQLSetConnectAttr を使用して、 bcp_execを呼び出す前にSQL_ATTR_ASYNC_ENABLEをSQL_ASYNC_ENABLE_ONに設定します。 完了をテストするには、同じパラメーターを使用して bcp_exec を呼び出します。 一括コピーがまだ完了していない場合、 bcp_exec はSUCCEED_ASYNCを返します。 また、サーバーに送信された行数の状態カウントpnRowsProcessed で返されます。 サーバーに送信された行は、バッチの終わりに到達するまではコミットされません。

SQL Server 2005 (9.x) 以降の一括コピーの破壊的変更については、「 一括コピー操作のパフォーマンス (ODBC)」を参照してください。

次の例は、 bcp_execの使用方法を示しています。

// Variables like henv not specified.  
HDBC      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("pubs..authors"), _T("authors.sav"), NULL, DB_OUT)  
   == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Now, execute the bulk copy.   
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)  
   {  
   if (nRowsProcessed == -1)  
      {  
      printf_s("No rows processed on bulk copy execution.\n");  
      }  
   else  
      {  
      printf_s("Incomplete bulk copy.   Only %ld row%s copied.\n",  
         nRowsProcessed, (nRowsProcessed == 1) ? "": "s");  
      }  
   return;  
   }  
  
printf_s("%ld rows processed.\n", nRowsProcessed);  
  
// Carry on.  

参照

一括コピー関数