分享方式:


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

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics 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_bindvarlen 參數指定的值會以不同於 ODBC bcp_bindcbData 參數來解譯。

    指出的條件 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_colfmtcbUserData 的問題與上述bcp_bindvarlencbData 參數相同。 將 -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 時,指定 以字元格式儲存的 datetimesmalldatetime 值將會有 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 版本中,在字元字串中使用 datetimesmalldatetime 值的格式是 yyyy-mm-dd hh:mm:ss.ss 的 ODBC 格式; smalldatetime 值使用 yyyy-mm-dd hh:mm:ss 的 ODBC 格式。

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

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

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

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

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

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

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

另請參閱

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