KB4046745- 修正:當您在 2014、2016 或 2017 SQL Server 中引用不存在的分割函式時,UPDATE 陳述式會靜默失敗

套用到
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 陳述句,透過 2014、2016 或 2017 SQL Server Microsoft $PARTITION關鍵字,參考一個不存在的分割函數。 例如,

注意

更新 TableName SET 欄位名稱='xyz' WHERE $PARTITION.NonExistingPartitionFunction (欄位名稱) = 1

此時 SQL Server 不會執行更新或回傳錯誤訊息,表示 NonExistingPartitionFunction 物件不存在。 然而,從使用者的角度來看, UPDATE 陳述式似乎是成功執行,但實際上卻失敗了。

原因

當你執行批次時,SQL Server可能會執行延遲名稱解析 (DNR) 。 在此過程中,SQL Server 遇到不存在的物件不會立即產生錯誤,且預期該物件會由模組或批次在執行參考該物件的敘述前建立。 對於分割函式,SQL Server 無法正確處理 DNR。

更多資訊

欲了解更多DNR相關資訊,請參閱 延後命名決議

解決方式

此問題已在以下 SQL Server 的累積更新中得到修正:

累積更新8 for SQL Server 2016 SP1

累積更新4 for SQL Server 2017

累積更新9 for SQL Server 2014 SP2

關於 SQL Server 的累積更新:

每次新的 SQL Server 累積更新都包含了之前累積更新中包含的所有熱修補與安全修補。 請查看 SQL Server 的最新累積更新:

SQL Server 2016 最新累積更新

SQL Server 2017 最新累積更新

SQL Server 2014 最新累積更新

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

參考資料

了解 Microsoft 用來說明軟體更新的術語