bcp_control

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics 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_writefmt 之後呼叫 bcp_control(hdbc,bcp_control(hdbc, BCPDELAYREADFMT, (void *)FALSE), (void *)TRUE),也會發生順序錯誤。

如需詳細資訊,請參閱中繼資料探索

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 格式檔案提供更大的彈性,但有一些新增的條件約束。 例如,您無法同時指定字段的前置詞和終止符,這在舊格式檔案中是可能的。

注意

只有在 SQL Server 與 SQL Server Native Client 一起安裝時,才支援 XML 格式檔案。

BCPHINTS
iValue 包含 SQLTCHAR 字元字串指標。 定址的字串會指定 SQL Server 大量複製處理提示或傳回結果集的 Transact-SQL 陳述式。 如果 Transact-SQL 陳述式指定為傳回一個以上的結果集,則第一個結果集之後的所有結果集都會被忽略。 如需大量複製處理提示的詳細資訊,請參閱 bcp 公用程式

BCPKEEPIDENTITY
當iValue為TRUE時,指定大量複製函式會插入針對以識別條件約束定義的SQL Server 數據行所提供的數據值。 輸入檔案必須提供識別資料行的值。 如果沒有設定,就會為插入的資料列產生新的識別值。 檔案中屬於識別欄位的所有資料都會被忽略。

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 時,指定 以字元格式儲存的 datetimesmalldatetime 值將會使用 ODBC 時間戳逸出序列前置詞和後綴。 BCPODBC 選項僅適用於DB_OUT。

當 FALSE 時, 代表 1997 年 1 月 1 日的日期時間 值會轉換成字元字串:1997-01-01 00:00:00.000。 當為 TRUE 時,會將相同的 日期時間 值表示為: {ts '1997-01-01 00:00:00.000'}。

BCPROWCOUNT
傳回受到目前 (或最近) BCP 作業影響的資料列數目。

BCPTEXTFILE
當為 TRUE 時,指定資料檔是文字檔,而不是二進位檔。 如果檔案是文本檔,BCP 會藉由檢查數據檔前兩個字節中的 Unicode 位元組標記來判斷它是否為 Unicode。

BCPUNICODEFILE
當為 TRUE 時,指定輸入檔是 Unicode 檔案。

iValue
這是指定 之 eOption 的值。 iValue 是轉換成 void 指標的整數 (LONGLONG) 值,允許未來擴充為 64 位值。

傳回

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);  
  

另請參閱

大量複製函式