Поделиться через


Функция ASCII возвращает различные результаты в таблицах базы данных издателя и подписчика

Область применения: SQL Server 2019

В этой статье приводятся обходные пути для проблемы, возвращающей ASCII различные результаты в таблицах базы данных издателя и подписчика.

Симптомы

Рассмотрим следующий сценарий:

  • Вы используете репликацию транзакций или слиянием в SQL Server 2019.

  • Исходная схема и данные применяются через агент моментальных снимков репликации.

  • В базе данных издателя столбец, определенный как тип данных символов, содержит значение NULL — символ ASCII 0 char(0).

В этом сценарии при ASCII преобразовании столбца в таблицах базы данных издателя и подписчика возвращаются разные результаты. См. следующий пример:

  • Преобразуйте столбец (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 в конце команды и нажмите кнопку "ОК", чтобы сохранить изменения.

    5. Примените последний драйвер Microsoft OLE DB:

      • Если агент распространителя (или агент слияния) выполняется для push-подписок, примените его на сервере распространителя.

      • Если агент распространителя (или агент слияния) выполняется для подписок на вытягивание, примените его на сервере подписчика.

    6. Переименуйте файл msoledbsql.dll в папке C:\Program Files\Microsoft SQL Server\150\COM:

      • Если это push-подписка, переименуйте файл в папке на сервере распространителя.

      • Если это подписка на вытягивание, переименуйте файл в папке на сервере подписчика.

    7. Скопируйте файл msoledbsql.dll из папки C:\Windows\System32\ и вставьте его в папку C:\Program Files\Microsoft SQL Server\150\COM.

  • Чтобы обойти эту проблему для репликации слиянием, выполните следующие действия.

    1. Применение накопительного обновления 15 (CU15) или более поздней версии SQL Server 2019 на сервере распространителя.

    2. Выполните все действия, применяемые к проблеме репликации транзакций.