共用方式為


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 和 bcp_writefmt 之後呼叫 bcp_control(hdbc,bcp_control(hdbc, BCPDELAYREADFMT, (void *)FALSE), (void *)TRUE),也會發生順序錯誤。

如需詳細資訊,請參閱 元數據探索

BCPFILECP
iValue 包含數據檔的代碼頁數。 您可以指定代碼頁的數目,例如 1252 或 850,或下列其中一個值:

BCPFILE_ACP:檔案中的數據位於 windows Microsoft?? 用戶端的代碼頁。

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,指定要複製到資料庫資料表之資料檔的第一個數據列。

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,指定要複製到資料庫資料表之資料檔的最後一個數據列。

iValue 參數必須是包含值的帶正負號 64 位整數的位址。 可以傳遞至 BCPLASTEX 的最大值是 2^63-1。

BCPMAXERRS
這是大量複製作業失敗之前所允許的錯誤數目。 預設值為 10;小於 1 的值會將此選項重設為預設值。 大量複製最多會產生 65,535 個錯誤。 嘗試將此選項設定為大於 65,535 的值,會導致選項設定為 65,535。

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

另請參閱

大量複製函式