应用对象
SQL Server 2014 Service Pack 2 - 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) SQL Server 2017 Developer SQL Server 2017 Enterprise Core SQL Server 2017 Enterprise SQL Server 2016 Service Pack 1 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)

症状

假设你有一个 UPDATE 语句,该语句使用 Microsoft SQL Server 2014、2016或2017中的 $PARTITION 关键字引用不存在的分区函数。 例如,

更新 TableNameColumnName= "xyz",其中 $PARTITION。NonExistingPartitionFunction (ColumnName) = 1

在这种情况下,SQL Server 不会执行更新或返回错误消息,以指示 NonExistingPartitionFunction 对象不存在。 但是,从用户角度看,虽然 UPDATE 语句已成功执行,但实际上它失败了。

原因

执行批处理时,SQL Server 可能会执行延迟的名称解析(DNR)。 在此过程中,SQL Server 在遇到不存在的对象时不会立即产生错误,并且预期该对象将在执行引用该对象的语句之前由模块或批处理创建。 对于分区函数,SQL Server 不会正确处理 DNR。

更多信息

有关 DNR 的详细信息,请参阅 延迟名称解析

解决方案

在 SQL Server 的以下累积更新中修复了此问题:

       SQL Server 2016 SP1 的累积更新8 

       SQL Server 2017 的累积更新4 

       SQL Server 2014 SP2 的累积更新9

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

SQL Server 2016 的最新累计更新

SQL Server 2017 的最新累计更新

SQL Server 2014 的最新累积更新

状态

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

参考

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

需要更多帮助?

需要更多选项?

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