DB-Library から ODBC への一括コピーの変換

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

SQL Server Native Client ODBC ドライバーでサポートされる一括コピー関数は DB ライブラリの一括コピー関数に似ていますが、次の例外があるため、DB ライブラリの一括コピー プログラムを ODBC に変換するのは簡単です。

  • 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 ライブラリメッセージおよびエラー ハンドラーをサポートしていません。ODBC 一括コピー関数によって発生したエラーとメッセージを取得するには、 SQLGetDiagRec を呼び出す必要があります。 ODBC バージョンの一括コピー関数は、標準的な一括コピーのリターン コードである SUCCEED または FAILED を返しますが、SQL_SUCCESS や SQL_ERROR など、ODBC 形式のリターン コードを返しません。

  • DB-Library bcp_bindvarlen パラメーターに指定された値は、ODBC bcp_bindcbData パラメーターとは解釈方法が異なります。

    指定された条件 DB-Library varlen ODBC cbData
    NULL 値が指定された場合 0 -1 (SQL_NULL_DATA)
    可変長のデータが指定された場合 -1 -10 (SQL_VARLEN_DATA)
    長さが 0 の文字列またはバイナリ文字列の場合 NA 0

    DB-Library では、 varlen 値 -1 は可変長データが指定されていることを示します。ODBC cbData では は NULL 値のみが指定されていることを意味すると解釈されます。 DB-Library varlen -1 の仕様を SQL_VARLEN_DATA に、 varlen 0 の仕様を SQL_NULL_DATA に変更します。

  • DB-Library bcp_colfmtfile_collen と ODBC bcp_colfmtcbUserData には、前述の bcp_bindvarlen パラメーターおよび cbData パラメーターと同じ問題があります。 DB-Library file_collen -1 の仕様をSQL_VARLEN_DATAに変更し、 file_collen の仕様を 0 から SQL_NULL_DATA に変更します。

  • ODBC bcp_control 関数の iValue パラメーターは void ポインターです。 DB-Library では、 iValue は整数でした。 ODBC iValue の値を void * にキャストします。

  • bcp_control オプション BCPMAXERRS は、一括コピー操作が失敗するまでにエラーが発生する可能性がある個々の行の数を指定します。 BCPMAXERRS の既定値は、db-Library バージョンの bcp_control では 0 (最初のエラーでは失敗)、ODBC バージョンでは 10 です。 既定の 0 に依存して一括コピー操作を終了する DB ライブラリ アプリケーションは、BCPMAXERRS を 0 に設定するために ODBC bcp_control を呼び出すために変更する必要があります。

  • ODBC bcp_control 関数は、db-Library バージョンの bcp_controlでサポートされていない次のオプションをサポートしています。

    • BCPODBC

      TRUE に設定すると、文字形式で保存された datetime および smalldatetime 値に ODBC タイムスタンプ エスケープ シーケンスプレフィックスとサフィックスが付きます。 これは、BCP_OUT 操作に対してのみ適用されます。

      BCPODBC を FALSE に設定すると、文字列に変換された datetime 値が次のように出力されます。

      1997-01-01 00:00:00.000  
      

      BCPODBC を TRUE に設定すると、 datetime 値は次のように出力されます。

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

      TRUE に設定した場合、一括コピー関数で、ID 制約を含む列に対して指定したデータ値が挿入されることを示します。 このオプションを設定しないと、挿入される行に対して新しい ID 値が生成されます。

    • BCPHINTS

      一括コピーのさまざまな最適化を指定します。 このオプションは、6.5 以前のバージョンの SQL Server では使用できません。

    • BCPFILECP

      一括コピー ファイルのコード ページを指定します。

    • BCPUNICODEFILE

      キャラクター モードの一括コピー ファイルが Unicode ファイルであることを指定します。

  • ODBC bcp_colfmt 関数は、ODBC SQLCHAR typedef と競合するため、SQLCHAR の file_type インジケーターをサポートしていません。 bcp_colfmtには、代わりに SQLCHARACTER を使用してください。

  • ODBC バージョンの一括コピー関数では、文字列の datetime および smalldatetime 値を操作するための形式は、ODBC 形式の yyyy-mm-dd hh:mm:ss.sss; です smalldatetime 値は、ODBC 形式の yyyy-mm-dd hh:mm:ss を使用します。

    一括コピー関数の DB-Library バージョンでは、次のいくつかの形式を使用文字列内の smalldatetime 値を受け取ります。

    • 既定の形式は mmm dd yyyy hh:mmxx xx は AM または PM です。

    • datetime および smalldatetime DB-Library dbconvert 関数でサポートされている任意の形式の文字列。

    • SQL Server クライアント ネットワーク ユーティリティの [DB-Library Options タブで [国際設定を使用する] チェック ボックスがオンになっている場合、DB ライブラリの一括コピー関数は、クライアント コンピューター レジストリのロケール設定に定義されている地域の日付形式の日付も受け入れます。

    DB-Library の一括コピー関数は、ODBC datetime 形式と smalldatetime 形式を受け入れません。

    SQL_SOPT_SS_REGIONALIZE ステートメント属性を SQL_RE_ON に設定すると、ODBC の一括コピー関数はクライアント コンピューターのレジストリのロケール設定に定義された地域別の日付形式のデータを受け取ります。

  • money値を文字形式で出力する場合、ODBC 一括コピー関数では 4 桁の有効桁数が指定され、コンマ区切り記号は指定されません。DB-Library バージョンでは、有効桁数が 2 桁のみで、コンマ区切り記号が含まれます。

参照

一括コピー操作の実行 (ODBC)
一括コピー関数