次の方法で共有


ASCII 関数は、パブリッシャー テーブルとサブスクライバー データベース テーブルで異なる結果を返します

適用対象: SQL Server 2019

この記事では、パブリッシャー テーブルとサブスクライバー データベース テーブルで関数が異なる結果を ASCII 返す問題の回避策について説明します。

現象

次のような状況で問題が発生します。

  • トランザクション レプリケーションまたはマージ レプリケーションは、SQL Server 2019 で使用します。

  • 初期スキーマとデータは、レプリケーション スナップショット エージェントを介して適用されます。

  • Publisher データベースでは、文字データ型として定義されている列に NULL 値 ASCII 文字 0 char(0)が含まれます。

このシナリオでは、 関数を ASCII 使用してパブリッシャー テーブルとサブスクライバー データベース テーブルの列を変換すると、異なる結果が返されます。 次のサンプルを参照できます。

  • Publisher データベース テーブルの列 (col1) を変換します。

    SELECT id, col1, ASCII(col1) FROM PublisherTable
    

    パブリッシャー テーブルの結果のスクリーンショット。

  • サブスクライバー データベース テーブルの列 (col1) を変換します。

    SELECT id, col1, ASCII(col1) FROM SubscriberTable
    

    サブスクライバー テーブルの結果のスクリーンショット。

回避策

  • トランザクション レプリケーションのこの問題を回避するには、次の手順に従います。

    1. SQL Server Management Studioを開き、ディストリビューターとして動作するサーバーに接続します。

    2. [オブジェクト エクスプローラー] で、[SQL Server エージェント] 展開し、[ジョブ] を展開します

    3. 影響を受けるパブリケーションのスナップショット エージェント ジョブを選択し、それを右クリックし、[プロパティ>] [手順] [手順>2>] [編集] の順に選択します。

    4. [ ジョブ ステップのプロパティ ] ウィンドウで、コマンドの最後に を追加 -NativeBcpFileFormatVersion 100 し、[ OK] を 選択して変更を保存します。

    5. 最新の Microsoft OLE DB ドライバーを適用します。

      • ディストリビューション エージェント (またはマージ エージェント) がプッシュ サブスクリプションに対して実行される場合は、ディストリビューター サーバーに適用します。

      • ディストリビューション エージェント (またはマージ エージェント) がプル サブスクリプションに対して実行される場合は、サブスクライバー サーバーに適用します。

    6. C:\Program Files\Microsoft SQL Server\150\COM フォルダー内のmsoledbsql.dllファイルの名前を変更します。

      • プッシュ サブスクリプションの場合は、ディストリビューター サーバー上のフォルダー内のファイルの名前を変更します。

      • プル サブスクリプションの場合は、サブスクライバー サーバー上のフォルダー内のファイルの名前を変更します。

    7. C:\Windows\System32\ フォルダーから msoledbsql.dll ファイルをコピーし、C:\Program Files\Microsoft SQL Server\150\COM フォルダーに貼り付けます。

  • マージ レプリケーションのこの問題を回避するには、次の手順に従います。

    1. ディストリビューター サーバー SQL Server 2019 累積的な更新プログラム 15 (CU15) 以降のバージョンを適用します。

    2. トランザクション レプリケーションの問題に適用されるすべての手順に従います。