停用 INSERT 和 UPDATE 陳述式的外部索引鍵條件約束
適用於: SQL Server 2016 (13.x) 和更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
您可以使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 中停用外部索引鍵條件約束。 如果您確知新資料不會違反現有條件約束,或是條件約束只適用於已經在資料庫中的資料,請使用此選項。
限制事項
停用這些條件約束之後,未來將不會根據條件約束的條件驗證資料行的插入或更新作業。
權限
需要資料表的 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