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
回避策
トランザクション レプリケーションのこの問題を回避するには、次の手順に従います。
SQL Server Management Studioを開き、ディストリビューターとして動作するサーバーに接続します。
[オブジェクト エクスプローラー] で、[SQL Server エージェント] を展開し、[ジョブ] を展開します。
影響を受けるパブリケーションのスナップショット エージェント ジョブを選択し、それを右クリックし、[プロパティ>] [手順] [手順>2>] [編集] の順に選択します。
[ ジョブ ステップのプロパティ ] ウィンドウで、コマンドの最後に を追加
-NativeBcpFileFormatVersion 100
し、[ OK] を 選択して変更を保存します。最新の Microsoft OLE DB ドライバーを適用します。
ディストリビューション エージェント (またはマージ エージェント) がプッシュ サブスクリプションに対して実行される場合は、ディストリビューター サーバーに適用します。
ディストリビューション エージェント (またはマージ エージェント) がプル サブスクリプションに対して実行される場合は、サブスクライバー サーバーに適用します。
C:\Program Files\Microsoft SQL Server\150\COM フォルダー内のmsoledbsql.dllファイルの名前を変更します。
プッシュ サブスクリプションの場合は、ディストリビューター サーバー上のフォルダー内のファイルの名前を変更します。
プル サブスクリプションの場合は、サブスクライバー サーバー上のフォルダー内のファイルの名前を変更します。
C:\Windows\System32\ フォルダーから msoledbsql.dll ファイルをコピーし、C:\Program Files\Microsoft SQL Server\150\COM フォルダーに貼り付けます。
マージ レプリケーションのこの問題を回避するには、次の手順に従います。
ディストリビューター サーバー SQL Server 2019 累積的な更新プログラム 15 (CU15) 以降のバージョンを適用します。
トランザクション レプリケーションの問題に適用されるすべての手順に従います。