Freigeben über


Die ASCII-Funktion gibt unterschiedliche Ergebnisse in Verleger- und Abonnentendatenbanktabellen zurück.

Gilt für: SQL Server 2019

Dieser Artikel enthält Problemumgehungen für das Problem, dass die Funktion in den ASCII Datenbanktabellen Verleger und Abonnenten unterschiedliche Ergebnisse zurückgibt.

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie verwenden die Transaktions- oder Mergereplikation in SQL Server 2019.

  • Das anfängliche Schema und die Daten werden über die Replikations-Momentaufnahmen-Agent angewendet.

  • In der Verlegerdatenbank enthält eine Spalte, die als Zeichendatentyp definiert ist, einen NULL-Wert – ASCII-Zeichen 0 char(0).

Wenn Sie in diesem Szenario die ASCII -Funktion verwenden, um die Spalte in den Datenbanktabellen Verleger und Abonnenten zu konvertieren, werden unterschiedliche Ergebnisse zurückgegeben. Sie können das folgende Beispiel verwenden:

  • Konvertieren Sie die Spalte (col1) in der Verlegerdatenbanktabelle:

    SELECT id, col1, ASCII(col1) FROM PublisherTable
    

    Screenshot der Ergebnisse für die Herausgebertabelle.

  • Konvertieren Sie die Spalte (col1) in der Datenbanktabelle des Abonnenten:

    SELECT id, col1, ASCII(col1) FROM SubscriberTable
    

    Screenshot der Ergebnisse für die Abonnententabellen.

Problemumgehung

  • Führen Sie die folgenden Schritte aus, um dieses Problem bei der Transaktionsreplikation zu umgehen:

    1. Öffnen Sie SQL Server Management Studio, und stellen Sie eine Verbindung mit dem Server her, der als Verteiler fungiert.

    2. Erweitern Sie unter Objekt-ExplorerSQL Server-Agent und dann Aufträge.

    3. Wählen Sie den Momentaufnahme-Agent-Auftrag für die betroffene Veröffentlichung aus, klicken Sie mit der rechten Maustaste darauf, und wählen Sie dann Eigenschaften>Schritte>Schritt 2>Bearbeiten aus.

    4. Fügen Sie im Fenster Auftragsschritteigenschaften am Ende des Befehls hinzu -NativeBcpFileFormatVersion 100 , und wählen Sie OK aus, um die Änderungen zu speichern.

    5. Wenden Sie den neuesten Microsoft OLE DB-Treiber an:

      • Wenn der Verteilungs-Agent (oder Merge-Agent) für Pushabonnements ausgeführt wird, wenden Sie ihn auf dem Verteilerserver an.

      • Wenn der Verteilungs-Agent (oder Merge-Agent) für Pullabonnements ausgeführt wird, wenden Sie ihn auf dem Abonnentenserver an.

    6. Benennen Sie die msoledbsql.dll-Datei im Ordner C:\Programme\Microsoft SQL Server\150\COM um:

      • Wenn es sich um ein Pushabonnement handelt, benennen Sie die Datei im Ordner auf dem Verteilerserver um.

      • Wenn es sich um ein Pullabonnement handelt, benennen Sie die Datei im Ordner auf dem Abonnentenserver um.

    7. Kopieren Sie die msoledbsql.dll Datei aus dem Ordner C:\Windows\System32\, und fügen Sie sie in den Ordner C:\Programme\Microsoft SQL Server\150\COM ein.

  • Führen Sie die folgenden Schritte aus, um dieses Problem bei der Mergereplikation zu umgehen:

    1. Wenden Sie SQL Server kumulatives Update 15 (CU15) 2019 oder eine höhere Version auf dem Verteilerserver an.

    2. Führen Sie alle Schritte aus, die auf das Transaktionsreplikationsproblem angewendet werden.