KB3136496 - 修复:当查询通过 2014 和 2016 SQL Server中的同义词引用 SQLCLR 函数时发生访问冲突

应用对象
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

症状

请考虑以下情形:

  • 有一个声明为“确定性”的 SQLCLR 函数,该函数可用于“用常量替换”优化。
  • 有一个指向 SQLCLR 函数的同义词。
  • TVF (表值函数通过同义词) 对 SQLCLR 函数的引用。

在这种情况下,当应用程序查询此 TVF 时,可能会出现访问冲突,并且你可能会收到类似于以下内容的错误消息:

注意

  • 消息 0,级别 11,状态 0,行 14
  • 当前命令出现严重错误。 应放弃结果(如果有)。

此外,SQL Server错误日志中记录了错误消息。

解决方法

SQL Server的 Service Pack 信息

以下 service Pack 中修复了此问题,适用于SQL Server:

Service Pack 2 for SQL Server 2016

Service Pack 3 for SQL Server 2014

关于SQL Server的 Service Pack:

Service Pack 具有累积性。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 建议为该服务包应用最新的 Service Pack 和最新的累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表 1 查找有关最新 Service Pack 和最新累积更新的详细信息。

如何确定 SQL Server 及其组件的版本、版本类别和更新级别

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

参考资料

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