徵狀
假設您嘗試從資料表刪除資料,而且 Microsoft SQL Server 2016年和 2017年中其他資料表中被參考的資料。我的f 您瀏覽查詢 執行計劃,您可以看到它使用核取的外部索引鍵參考的運算子.在此情況下,您可能會收到下列錯誤訊息即使資料列被 刪除未被參考其他資料表中:
訊息 547、 層級 16,狀態 0,行LineNumber
與參考條件約束衝突的 DELETE 陳述式
狀態
Microsoft 已確認<適用於>一節所列的 Microsoft 產品確實有上述問題。
解決方案
在 SQL Server 的下列累積更新程式修正這個問題:
注意SQL Server 2016 sp2 中累積的更新 6 修正這個問題。
有關 SQL Server 所累積的更新:
SQL Server 的每個新的累積更新包含的所有修補程序與安全性修正,全都包含在先前的累積更新。检验 SQL Server 的最新的累積更新︰
因應措施
若要解決這個問題,請使用下列其中一個方法:
-
若要執行這項查詢中使用下方 130 的相容性層級。
-
變更參考資料表的索引結構。
其他相關資訊
開始資料庫範圍設定相容性層級 在 SQL Server 2016年 130,查詢執行計劃可以使用外部索引鍵參考 若要確認是否要將資料表中的資料列參考任何其他的資料列的核取運算子 透過參考完整性條件約束的資料表。如果可以使用這類運算子 大量的外部索引的資料表會參考資料表。在此運算子, SQL Server 選擇要執行這類檢查每個參考資料表中的索引。如果 參考的資料表有多個索引鍵的資料行與索引這類部分 資料行的開頭不是外部索引鍵中,但其他的一部分 資料行屬於外部索引鍵的一部份。這可能會導致不正確執行的核取 由 SQL Server。
例如,請考慮下列的結構描述:
建立資料表 tpk (pk int 條件約束 叢集 cpk 主索引鍵)
建立資料表 (int、 fk int 的 tfk 條件約束 cfk 外部索引鍵參考 tpk,索引 ia clustered(a,fk))
這類結構描述可能會導致這個問題,但如果您變更 中的資料行的順序索引到 ia (fk,),並不會。
參考
深入了解 術語,Microsoft 會使用描述軟體更新。