適用於: SQL Server 2016(13.x)及後續版本
Azure SQL Database
Azure SQL 受控執行個體
Azure Synapse Analytics
SQL 資料庫 in Microsoft Fabric
你可以在 SQL Server 中,於 INSERT 和 UPDATE 交易期間,使用 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