適用於:SQL Server 2016 (13.x) 及以後版本
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (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