bcp_exec
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics 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_control 指定給 BCPMAXERRS 的值,則bcp_exec 會傳 回 FAIL。 BCPMAXERRS 預設為 10。 BCPMAXERRS 選項只會影響提供者從資料檔案讀取資料列時偵測到的語法錯誤(而不是傳送至伺服器的資料列)。 當伺服器偵測到資料列發生錯誤時,伺服器會中止批次。 檢查 pnRowsProcessed 參數,以取得成功複製的資料列數目。
備註
此函式會根據 bcp_init 中的 eDirection 參數值 ,將資料從使用者檔案複製到資料庫資料表,反之亦然。
在呼叫 bcp_exec 之前,請以有效的使用者檔案名呼叫 bcp_init 。 無法執行這項操作時,會發生錯誤。
bcp_exec是唯一可能會長時間未處理的大量複製函式。 因此,它是唯一支援非同步模式的大量複製函式。 若要設定非同步模式,請在呼叫 bcp_exec 之前,使用 SQLSetConnectAttr 將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.
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應