適用於: SQL Server 2016 (13.x)和更新版本
Azure SQL Database
Azure SQL 受控實例
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 資料庫
您可以在 SQL Server 中使用 SQL Server Management Studio 或 Transact-SQL,停用插入和更新交易中的外部索引鍵約束。 如果您確知新資料不會違反現有條件約束,或是條件約束只適用於已經在資料庫中的資料,請使用此選項。
限制與約束
停用這些約束後,未來在此資料行上的插入或更新作業將不會根據約束條件進行驗證。
權限
需要資料表的 ALTER 權限。
使用 SQL Server Management Studio
若要停用 INSERT 和 UPDATE 陳述式中的外鍵約束
在 [物件總管]中,展開含有條件約束的資料表,然後展開 [索引鍵] 資料夾。
以滑鼠右鍵按一下條件約束,然後選取 [修改]。
在 [資料表設計工具] 底下的方格中,選取 [強制使用外部索引鍵條件約束],然後從下拉式功能表中選取 [否]。
選取 [關閉]。
若要視需要重新啟用條件約束,請反轉上述步驟。 選取「強制執行外來鍵約束」,然後從下拉式選單中選取「是」。
若要透過檢查外部索引鍵關聯中的現有資料來信任條件約束,請選取「在建立或重新啟用時檢查現有資料」,然後從下拉式功能表中選取「是」。 這可確保外部索引鍵條件約束受到信任。
- 如果 [檢查建立或重新啟用時的現有資料] 設定為 [否],則外部索引鍵在重新啟用時不會檢查現有資料。 因此,查詢最佳化工具無法考慮潛在的效能改善。 建議使用受信任的外來鍵,因為它們可用來在基於外來鍵約束的假設下簡化執行計劃。 若要檢查資料庫中是否信任外部索引鍵,請參閱本文稍後的範例查詢。
使用 Transact-SQL
若要停用 INSERT 和 UPDATE 陳述式的外鍵約束
在物件總管中連線到資料庫引擎的執行個體。
在標準列上,選取 [新增查詢]。
複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。
USE AdventureWorks2022; GO ALTER TABLE Purchasing.PurchaseOrderHeader NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO
若要在需要時重新啟用條件約束,請將下列範例複製並貼到查詢視窗中,然後選取 [執行]。
USE AdventureWorks2022; GO ALTER TABLE Purchasing.PurchaseOrderHeader CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO
請確認您環境中的限制是受信任且已啟用的。 如果
is_not_trusted
= 1,則外部索引鍵不會在重新啟用或重新建立資料時檢查現有的資料。 因此,查詢最佳化工具無法考慮潛在的效能改善。 建議使用受信任的外鍵,因為它們可以用於簡化執行計畫,假設則基於外鍵約束條件。 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。SELECT o.name, fk.name, fk.is_not_trusted, fk.is_disabled FROM sys.foreign_keys AS fk INNER JOIN sys.objects AS o ON fk.parent_object_id = o.object_id WHERE fk.name = 'FK_PurchaseOrderHeader_Employee_EmployeeID'; GO
如果資料表中的現有資料符合外部索引鍵條件約束,您應該將外部索引鍵條件約束設定為受信任。 若要將外部索引鍵設定為受信任,請使用下列指令碼再次信任外部索引鍵條件約束,並記下其他
WITH CHECK
語法。 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。ALTER TABLE [Purchasing].[PurchaseOrderHeader] WITH CHECK CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO