Проблема
Предположим, что у вас есть настройка, в которой Microsoft SQL Server 2016 выступает в качестве распространителя, а SQL Server 2014 или SQL Server 2012 выступает в качестве издателя. В этой настройке при создании snapshot или публикации транзакций или публикации слиянием в SQL Server 2012 или SQL Server 2014 Publisher с определяемой пользователем функцией (UDF) в качестве статьи агент моментальных снимков произойдет сбой при написании скрипта, и вы получите сообщение об ошибке следующего вида:
Примечание
Сбой скрипта для UserDefinedFunction schema.functionname
В журнале заданий агент моментальных снимков отображается следующее сообщение об ошибке:
Примечание
<DateTime> [5%] Агент репликации обнаружил исключение
<Источник даты и времени> : неизвестно
<Тип исключения DateTime> : Microsoft.SqlServer.Management.Smo.FailedOperationException
<Сообщение об исключении DateTime> : сбой скрипта для UserDefinedFunction 'schema.functionname'
<Код сообщения DateTime> : неприменимо
Причина
Эта проблема возникает из-за того, что агент моментальных снимков использует Miscrosft.SqlServer.Smo.dll SMO для создания скриптов статей. SQL Server 2016 добавляет новое свойство SMO IsNativelyCompiled для In-Memory функций и хранимых процедур. Это свойство не отображается в SQL Server версия которых более ранняя, чем SQL Server 2016. При запуске агент моментальных снимков на распространителе для SQL Server 2016 года используется Microsoft.SqlServer.Smo.dll SQL Server 2016, но он пытается проверка для свойства SMO IsNativelyCompiled в SQL Server 2012 или 2014 Publisher и завершается сбоем с приведенной выше ошибкой.
Решение
Эта проблема устранена в следующих накопительных обновлениях для SQL Server:
Накопительный пакет обновления 2 для SQL Server 2016 с пакетом обновления 1 (SP1)
Накопительный пакет обновления 4 для SQL Server 2016
Сведения о накопительных обновлениях для SQL Server
Каждое новое накопительное обновление для SQL Server содержит все исправления и все исправления для системы безопасности, которые были включены в предыдущее накопительное обновление. Ознакомьтесь с последними накопительными обновлениями для SQL Server:
Последнее накопительное обновление для SQL Server 2016 г.
Временное решение
Чтобы обойти эту проблему, создайте определяемые пользователем функции (UDF) вручную на подписчике.
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».
Ссылки
Узнайте о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.