症状
假设你有一个 UPDATE 语句,该语句使用 SQL Server 2014、2016 或 2017 Microsoft $PARTITION 关键字 (keyword) 引用不存在的分区函数。 例如,
注意
UPDATE TableName SET ColumnName='xyz' WHERE $PARTITION。NonExistingPartitionFunction (ColumnName) = 1
在这种情况下,SQL Server不执行更新或返回错误消息以指示 NonExistingPartitionFunction 对象不存在。 但是,从用户的角度来看, UPDATE 语句似乎已成功执行,但实际上它失败了。
原因
执行批处理时,SQL Server可能会 (DNR) 执行延迟的名称解析。 在此过程中,SQL Server在遇到不存在的对象时不会立即生成错误,并且预期在引用该对象的语句执行之前,该对象将由模块或批处理创建。 对于分区函数,SQL Server未正确处理 DNR。
详细信息
有关 DNR 的详细信息,请参阅 延迟名称解析。
解决方法
以下SQL Server累积更新中修复了此问题:
关于SQL Server的累积更新:
SQL Server的每个新累积更新都包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看SQL Server的最新累积更新:
状态
Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。
参考资料
了解 Microsoft 用于描述软件更新的术语。