共用方式為


從 DB-Library 轉換成 ODBC 大量複製

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

將 DB-Library 大量複製程式轉換成 ODBC 很容易,因為 SQL Server Native Client ODBC 驅動程式所支援的大量複製函式類似于 DB-Library 大量複製函式,但有下列例外狀況:

  • DB-Library 應用程式會將指標傳遞至 DBPROCESS 結構,作為大量複製函式的第一個參數。 在 ODBC 應用程式中,DBPROCESS 指標會取代為 ODBC 連接控制碼。

  • DB 程式庫應用程式會先呼叫 BCP_SETL ,再連線以在 DBPROCESS 上啟用大量複製作業。 ODBC 應用程式會改為呼叫 SQLSetConnectAttr ,然後再連線以在連接控制碼上啟用大量作業:

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,  
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);  
    
  • SQL Server Native Client ODBC 驅動程式不支援 DB-Library 訊息和錯誤處理常式;您必須呼叫 SQLGetDiagRec ,以取得 ODBC 大量複製函式所引發的錯誤和訊息。 大量複製函式的 ODBC 版本會傳回 SUCCEED 或 FAILED 的標準大量複製傳回碼,而不是 ODBC 樣式的傳回碼,例如SQL_SUCCESS或SQL_ERROR。

  • 為 DB-Library bcp_bind varlen 參數指定的值會以不同于 ODBC bcp_bind cbData 參數來解譯。

    指出的條件 DB-Library varlen ODBC cbData
    提供的 Null 值 0 -1 (SQL_Null_DATA)
    提供的變數資料 -1 -10 (SQL_VARLEN_DATA)
    長度為零的字元或二進位字串 NA 0

    在 DB-Library 中 ,varlen 值 -1 表示提供可變長度資料,其中 ODBC cbData 會解譯為表示只提供 Null 值。 將 -1 的任何 DB-Library varlen 規格變更為 SQL_VARLEN_DATA,並將 0 的任何 varlen 規格變更為 SQL_Null_DATA。

  • DB 程式庫 bcp_colfmt file_collen 和 ODBC bcp_colfmt cbUserData 的問題與上述bcp_bind varlen cbData 參數相同。 將 -1 的任何 DB 程式庫 file_collen 規格變更為 SQL_VARLEN_DATA,並將 0 的任何 file_collen 規格變更為 SQL_Null_DATA。

  • ODBC bcp_control 函式的 iValue 參數是 void 指標。 在 DB-Library 中, iValue 是整數。 將 ODBC iValue 的值轉換為 void *。

  • bcp_control 選項 BCPMAXERRS 會指定大量複製作業失敗之前,有多少個個別資料列可能有錯誤。 BCPMAXERRS 的預設值為 0 (第一個錯誤時失敗),在 DB-Library 版本的 bcp_control 和 ODBC 版本中為 10。 相依于預設值 0 以終止大量複製作業的 DB-Library 應用程式必須變更,才能呼叫 ODBC bcp_control ,將 BCPMAXERRS 設定為 0。

  • ODBC bcp_control 函式支援 DB-Library 版本的 bcp_control 不支援下列選項:

    • BCPODBC

      當設定為 TRUE 時,指定 以字元格式儲存的 datetime Smalldatetime 值將會有 ODBC 時間戳記逸出序列前置詞和尾碼。 這只適用于BCP_OUT作業。

      當 BCPODBC 設定為 FALSE 時, 轉換成字元字串的日期時間 值會輸出為:

      1997-01-01 00:00:00.000  
      

      當 BCPODBC 設定為 TRUE 時,相同的 日期時間 值會輸出為:

      {ts '1997-01-01 00:00:00.000' }  
      
    • BCPKEEPIDENTITY

      當設定為 TRUE 時,指定大量複製函式會插入針對具有識別條件約束的資料行提供的資料值。 如果沒有設定,就會為插入的資料列產生新的識別值。

    • BCPHINTS

      指定各種大量複製優化。 此選項無法在 6.5 或舊版 SQL Server 上使用。

    • BCPFILECP

      指定大量複製檔案的字碼頁。

    • BCPUNICODEFILE

      指定字元模式大量複製檔案是 Unicode 檔案。

  • ODBC bcp_colfmt 函式不支援 SQLCHAR 的file_type 指標,因為它與 ODBC SQLCHAR typedef 衝突。 請改用 SQLCHARACTER 進行 bcp_colfmt

  • 在大量複製函式的 ODBC 版本中,在字元字串中使用 datetime Smalldatetime 值的格式是 yyyy-mm-dd hh:mm:ss.ss 的 ODBC 格式; Smalldatetime 值使用 yyyy-mm-dd hh:mm:ss 的 ODBC 格式。

    大量複製函式的 DB-Library 版本會使用數種格式,接受 字元字串中的 datetime Smalldatetime 值:

    • 預設格式為 mmm dd yyyy hh:mmxx,其中 xx 是 AM 或 PM。

    • datetime Smalldatetime 字元字串,格式為 DB-Library dbconvert 函式所支援的任何格式。

    • 在 SQL Server 用戶端網路公用程式的 [DB-Library 選項 ] 索引標籤上核取 [ 使用國際設定 ] 方塊時,DB-Library 大量複製函式也會接受針對用戶端電腦登錄地區設定所定義的地區日期格式日期。

    DB-Library 大量複製函式不接受 ODBC datetime Smalldatetime 格式。

    如果 SQL_SOPT_SS_REGIONALIZE 語句屬性設定為 SQL_RE_ON,ODBC 大量複製函式會接受針對用戶端電腦登錄地區設定所定義的地區日期格式的日期。

  • 當以字元格式輸出 貨幣 值時,ODBC 大量複製函式會提供四位數的有效位數,而且沒有逗號分隔符號:DB 程式庫版本只提供兩位數的有效位數,並包含逗號分隔符號。

另請參閱

執行大量複製作業 (ODBC)
大量複製函式