Share via


bcp_control

針對檔案和 SQL Server 之間的大量複製,變更各種控制項參數的預設設定。

語法

RETCODE bcp_control (
        HDBC hdbc,
        INT eOption,
        void* iValue);

引數

  • dbc
    這是已啟用大量複製的 ODBC 連接控制代碼。

  • eOption
    為下列其中一項:

  • BCPABORT
    停止已經進行的大量複製作業。您可以用 BCPABORT 的 eOption,從另一個執行緒呼叫 bcp_control 以停止正在執行的大量複製作業。iValue 參數會被忽略。

  • BCPBATCH
    這是每一批次中的資料列數目。預設值為 0,這表示在擷取資料時,會指出資料表中的所有資料列,或在資料複製到 SQL Server 時,會指出使用者資料檔中的所有資料列。小於 1 的值會重設 BCPBATCH 為預設值。

  • BCPFILECP
    iValue 包含資料檔的字碼頁數目。您可以指定字碼頁的數目,例如 1252 或 850,或以下任一個值:

    BCPFILE_ACP:檔案中的資料位於用戶端的 Microsoft Windows® 字碼頁。

    BCPFILE_OEMCP:檔案中的資料位於用戶端的 OEM 字碼頁 (預設值)。

    BCPFILE_RAW:檔案中的資料位於 SQL Server 的字碼頁。

  • BCPFILEFMT
    資料檔案格式的版本號碼。這個號碼可以是 80 (SQL Server 2000)、90 (SQL Server 2005) 或 100 (SQL Server 2008 或 SQL Server 2008 R2)。100 是預設值。這個值在使用舊版伺服器支援的格式匯出和匯入資料時非常實用。例如,如果要將從 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 In 作業,則指定將資料檔案的第一個資料列複製到資料庫資料表中。

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

  • BCPFMTXML
    指定所產生的格式檔案應該是 XML 格式。預設為關閉。

    XML 格式檔案提供更高的彈性,但是需要加入一些條件約束。例如,您不可以同時指定欄位的前置詞和結束字元,即使在舊版的格式檔案中可以這麼做。

    [!附註]

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

  • 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 選項只適用於 BCP_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 是整數 (LONGLONG) 值,會轉換 Void 指標以便日後擴充為 64 位元值。

傳回值

SUCCEED 或 FAIL。

備註

此函數會設定各種大量複製作業的控制參數,包含取消大量複製之前所允許的錯誤次數、從資料檔複製的第一個和最後一個資料列的數目,以及批次大小。

從 SQL Server 大量複製 SELECT 的結果集時,這個函數也可用來指定 SELECT 陳述式。將 eOption 設定為 BCPHINTS,並且將 iValue 設定為具有指向 SQLTCHAR 字串 (包含 SELECT 陳述式) 的指標。

只有在使用者檔案和 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);

請參閱

參考