共用方式為


bcp_colfmt

在使用者檔案中指定資料的來源或目標格式。當做來源格式使用時,bcp_colfmt 會將當做大量複製中資料來源使用之現有資料檔案的格式指定給 SQL Server 資料表。當做目標格式使用時,則會透過利用 bcp_colfmt 所指定的資料行格式建立資料檔案。

語法

RETCODE bcp_colfmt (
        HDBC hdbc,
        INT idxUserDataCol,
        BYTE eUserDataType,
        INT cbIndicator,
        DBINT cbUserData,
        LPCBYTE pUserDataTerm,
        INT cbUserDataTerm,
        INT idxServerCol);

引數

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

  • idxUserDataCol
    這是使用者資料檔案中,要指定其格式的序數資料行編號。第一個資料行是 1。

  • eUserDataType
    這是使用者檔案中,此資料行的資料類型。如果與資料庫資料表 (idxServerColumn) 中,對應資料行的資料類型不同,大量複製就會轉換資料 (如果可能的話)。

    SQL Server 2005 已在 eUserDataType 參數中導入 SQLXML 和 SQLUDT 資料類型 Token 的支援。

    eUserDataType 參數是透過 sqlncli.h 中的 SQL Server 資料類型 Token,而非透過 ODBC C 資料類型列舉值列舉。例如,您可以使用 SQL Server 專屬類型 SQLCHARACTER 來指定字元字串 ODBC type SQL_C_CHAR。

    若要指定 SQL Server 資料類型的預設資料表示法,將此參數設定為 0。

    若要從 SQL Server 大量複製到檔案,當 eUserDataType 為 SQLDECIMAL 或 SQLNUMERIC 時:

    • 如果來源資料行不是小數數值,會使用預設的有效位數和小數位數。

    • 如果來源資料行是小數數值,則會使用來源資料行的有效位數和小數位數。

  • cbIndicator
    這是資料行資料內,長度/null 指標的長度 (以位元組為單位)。有效的指標長度值為 0 (不使用指標時)、1、2、4 或 8。

    若要指定預設大量複製指標使用率,將此參數設定為 SQL_VARLEN_DATA。

    這些指標會出現在任何資料正前方的記憶體中,以以所套用之資料正前方的資料檔案中。

    如果使用多種指定資料檔案資料行長度的方式 (例如指標和最大資料行長度,或指標和結束字元順序),大量複製會選擇導致複製最少量資料的方式。

    大量複製在不透過使用者操作來調整資料格式時所產生的資料檔案,會在資料行資料長度可以改變,或資料行可以當做值接受 NULL 時包含指標。

  • cbUserData
    這是使用者檔案中此資料行之資料的最大長度 (以位元組為單位),不包括任何長度指標或結束字元的長度。

    cbUserData 設定為 SQL_NULL_DATA 表示資料檔案資料行中的所有值都會 (或應該) 設定為 NULL。

    cbUserData 設定為 SQL_VARLEN_DATA 表示系統應該決定每個資料行中的資料長度。對於某些資料行,這可能表示長度/null 指標會在 SQL Server 複本之資料前產生,或者表示該指標應該會在複製到 SQL Server 的資料中出現。

    對於 SQL Server 字元和二進位資料類型,cbUserData 可能是 SQL_VARLEN_DATA、SQL_NULL_DATA、0 或某些正值。如果 cbUserData 為 SQL_VARLEN_DATA,系統會使用長度指標 (如果存在) 或結束字元順序來決定資料的長度。如果同時提供長度指標與結束字元順序,大量複製會使用導致複製最少量資料者。如果 cbUserData 為 SQL_VARLEN_DATA,資料類型為 SQL Server 字元或二進位類型,而且長度指標和結束字元順序都未指定,系統會傳回錯誤訊息。

    如果 cbUserData 為 0 或正值,則系統會使用 cbUserData 當做最大的資料長度。不過,如果除了正的 cbUserData 之外,也提供長度指標或結束字元順序,系統會使用導致複製最少量資料的方式決定資料長度。

    cbUserData 值表示資料的位元組計數。如果字元資料是以 Unicode 寬字元表示,則 cbUserData 正參數值表示字元數乘以每個字元的大小 (以位元組為單位)。

  • pUserDataTerm
    這是要用於此資料行的結束字元順序。此參數主要用於字元資料類型,因為其他所有類型都屬固定長度;如果是二進位資料,則需要一個長度指標,才能正確記錄出現的位元組數目。

    為避免結束已擷取的資料,或要指出使用者檔案中的資料未結束,將此參數設定為 NULL。

    如果使用多種指定使用者檔案資料行長度的方式 (例如結束字元和長度指標,或結束字元和最大資料行長度),大量複製會選擇導致複製最少量資料的方式。

    大量複製 API 會視需要執行 Unicode 到 MBCS 的字元轉換。請務必確認結束字元位元組字串與位元組字串長度的設定正確。

  • cbUserDataTerm
    這是要用於此資料行的結束字元順序長度 (以位元組為單位)。如果資料中沒有或不需要結束字元,將此值設定為 0。

  • idxServerCol
    這是資料行在資料庫資料表中的序數位置。第一個資料行編號為 1。資料行的序數位置是由 SQLColumns 所報告。

    如果此值為 0,大量複製在資料檔案中會忽略資料行。

傳回值

SUCCEED 或 FAIL。

備註

bcp_colfmt 函數可讓您指定大量複製的使用者檔案格式。針對大量複製,格式包含下列部分:

  • 從使用者檔案資料行對應至資料庫資料行。

  • 每個使用者檔案資料行的資料類型。

  • 每個資料行的選擇性指標長度。

  • 每個使用者檔案資料行的資料最大長度。

  • 每個資料行的選擇性結束位元組順序。

  • 選擇性結束位元組順序的長度。

bcp_colfmt 的每個呼叫都會針對一個使用者檔案資料行指定格式。例如,若要在五個資料行的使用者資料檔案中變更三個資料行的預設值,請先呼叫 bcp_columns(5),然後呼叫 bcp_colfmt 五次,其中三次呼叫會設定您的自訂格式。至於剩餘的兩次呼叫,將 eUserDataType 設定為 0,並將 cbIndicatorcbUserDatacbUserDataTerm 分別設定為 0、SQL_VARLEN_DATA 以及 0。此程序會複製全部五個資料行,其中三個為您自訂的格式,而另兩個為預設格式。

對於 cbIndicator,8 這個值表示大數值類型現在有效。如果有針對其對應資料行是新最大類型的欄位指定前置詞,則僅能將該前置詞設定為 8。如需詳細資訊,請參閱<bcp_bind>。

在呼叫 bcp_colfmt 前,必須先呼叫 bcp_columns 函數。

您必須在使用者檔案中,針對每個資料行呼叫 bcp_colfmt 一次。

針對任何使用者檔案資料行多次呼叫 bcp_colfmt 會造成錯誤。

您不需要將使用者檔案中的所有資料複製到 SQL Server 資料表。若要略過資料行,請指定資料行的資料格式,並將 idxServerCol 參數設定為 0。如果您要略過資料行,則必須指定其類型。

bcp_writefmt 函數可用於保存格式規格。

bcp_colfmt 支援增強的日期和時間功能

如需有關搭配日期/時間類型之 eUserDataType 參數使用的類型詳細資訊,請參閱<增強型日期/時間類型的大量複製變更 (OLE DB 和 ODBC)>。

如需詳細資訊,請參閱<ODBC 日期/時間的改善 (ODBC)>。

請參閱

參考