Udostępnij za pośrednictwem


Funkcja ASCII zwraca różne wyniki w tabelach bazy danych wydawcy i subskrybenta

Dotyczy: SQL Server 2019

Ten artykuł zawiera obejścia problemu, który ASCII funkcja zwraca różne wyniki w tabelach bazy danych Wydawca i Subskrybent.

Symptomy

Rozważmy następujący scenariusz:

  • Replikacja transakcyjna lub scalona jest używana w programie SQL Server 2019.

  • Początkowy schemat i dane są stosowane za pośrednictwem agenta migawki replikacji.

  • W bazie danych programu Publisher kolumna zdefiniowana jako typ danych znaków zawiera wartość NULL — znak ASCII 0 char(0).

W tym scenariuszu ASCII , gdy używasz funkcji do konwertowania kolumny w tabelach bazy danych Wydawca i Subskrybent, zwracane są różne wyniki. Możesz odwołać się do następującego przykładu:

  • Przekonwertuj kolumnę (col1) w tabeli bazy danych programu Publisher:

    SELECT id, col1, ASCII(col1) FROM PublisherTable
    

    Zrzut ekranu przedstawiający wyniki tabeli wydawcy.

  • Przekonwertuj kolumnę (col1) w tabeli bazy danych subskrybentów:

    SELECT id, col1, ASCII(col1) FROM SubscriberTable
    

    Zrzut ekranu przedstawiający wyniki tabel subskrybentów.

Rozwiązanie

  • Aby obejść ten problem w przypadku replikacji transakcyjnej, wykonaj następujące kroki:

    1. Otwórz program SQL Server Management Studio i połącz się z serwerem działającym jako dystrybutor.

    2. W obszarze Eksplorator obiektów rozwiń węzeł SQL Server Agent, a następnie rozwiń węzeł Zadania.

    3. Wybierz zadanie agenta migawki dla publikacji, którego dotyczy problem, kliknij go prawym przyciskiem myszy, a następnie wybierz pozycję Kroki właściwości>Krok>2>Edycja.

    4. W oknie Właściwości kroku zadania dodaj -NativeBcpFileFormatVersion 100 na końcu polecenia i wybierz przycisk OK, aby zapisać zmiany.

    5. Zastosuj najnowszy sterownik OLE DB firmy Microsoft:

      • Jeśli agent dystrybucji (lub agent scalania) jest uruchamiany dla subskrypcji wypychanych, zastosuj go na serwerze dystrybutora.

      • Jeśli agent dystrybucji (lub agent scalania) jest uruchamiany dla subskrypcji ściągnięcia, zastosuj go na serwerze subskrybenta.

    6. Zmień nazwę pliku msoledbsql.dll w folderze C:\Program Files\Microsoft SQL Server\150\COM:

      • Jeśli jest to subskrypcja wypychana, zmień nazwę pliku w folderze na serwerze dystrybutora.

      • Jeśli jest to subskrypcja ściągania, zmień nazwę pliku w folderze na serwerze subskrybenta.

    7. Skopiuj plik msoledbsql.dll z folderu C:\Windows\System32\ i wklej go do folderu C:\Program Files\Microsoft SQL Server\150\COM.

  • Aby obejść ten problem związany z replikacją scalania, wykonaj następujące kroki:

    1. Zastosuj aktualizację zbiorczą PROGRAMU SQL Server 2019 (CU15) lub nowszą wersję na serwerze dystrybutora.

    2. Wykonaj wszystkie kroki, które są stosowane do problemu z replikacją transakcyjną.