次の方法で共有


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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

  • DB-Library アプリケーションでは、DBPROCESS 構造体を指すポインターを一括コピー関数の最初のパラメーターに渡します。 ODBC アプリケーションでは、DBPROCESS ポインターが ODBC 接続ハンドルに置き換わります。

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

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

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

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

  • DB-Library bcp_colfmt file_collenと ODBC bcp_colfmtcbUserData には、前述の varlen パラメーターと cbData パラメーター bcp_bind同じ問題があります。 -1 の DB-Library file_collen 仕様を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-Library、ODBC bcp_control を呼び出して BCPMAXERRS を 0 に設定するように変更する必要があります。

  • 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 値を操作するための形式は、yyyy-mm-dd hh:mm:ss.sss の ODBC 形式です。 smalldatetime 値は、yyyy-mm-dd hh:mm:ss の ODBC 形式を使用します。

    一括コピー関数のDB-Libraryバージョンでは、複数の形式を使用して、文字列内の datetime 値と smalldatetime 値を受け入れます。

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

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

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

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

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

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

参照

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