症状

假设你有一个设置,其中 Microsoft SQL Server 2016 作为分发服务器,SQL Server 2014 或 SQL Server 2012 正在充当 Publisher。 在此设置中,如果你在 SQL Server 2012 或 SQL Server 2014 发布服务器上使用用户定义的函数(UDF)作为项目创建快照或事务性或合并发布,则在脚本 UDF 中,快照代理会失败,并且收到类似于以下内容的错误消息:

UserDefinedFunction "schema functionname" 的脚本失败

从快照代理作业历史记录中看到以下错误消息:

<DateTime> [5%] 复制代理遇到异常<DateTime> Source:未知<DateTime> FailedOperationException<DateTime> <DateTime> UserDefinedFunction "functionname" DateTime 消息代码: "不适用" 的错误消息。

原因

出现此问题的原因是快照代理使用 SMO Miscrosft。用于编写文章脚本的 SqlServer。 SQL server 2016 为内存中函数/存储过程添加了新的 SMO 属性 IsNativelyCompiled。 此属性未显示在版本低于 SQL Server 2016 的 SQL Server 中。 当你在分发服务器上运行 SQL Server 2016 的快照代理时,它将使用 Sql server 2016 的 sql server,但它尝试 针对 sql SERVER 2012 或 2014 Publisher 检查 Smo 属性 IsNativelyCompiled,并且由于上述错误而失败。

解决方案

在 SQL Server 的以下累积更新中修复了此问题: Sql server 2016 SP1 的累积更新 2 SP1累积更新4(适用于 sql server 2016

SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新: SQL Server 2016 的最新累积更新

解决方法

若要解决此问题,请在订阅者上手动创建用户定义的函数(UDF)。

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

参考

了解 Microsoft 用于描述软件更新的 术语

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。