禁用複製的外鍵條件約束
適用於: SQL Server 2016 (13.x)和其後版本
Azure SQL Database
Azure SQL 受控實例
Azure Synapse Analytics
Analytics 平臺系統(PDW)
Microsoft Fabric 中的 SQL 資料庫
您可以使用 SQL Server Management Studio 或 Transact-SQL 來停用 SQL Server 中的外部索引鍵條件約束。 這可能有用,尤其是在從先前版本的 SQL Server 發佈資料時。
注意
如果資料表是透過複寫發行的,則會自動停用複寫代理程式所執行作業的外部索引鍵約束。 依預設,NOT FOR REPLICATION 選項將指定給外鍵約束和檢查約束;此約束對使用者操作而非代理操作強制執行。 當複寫代理程式在訂閱者端執行插入、更新或刪除時,不會檢查條件約束;如果使用者執行插入、更新或刪除,則會檢查條件約束。 停用複製代理程式的條件約束,是因為原本插入、更新或刪除資料時,就已在發行者端檢查過條件約束。
權限
需要資料表的 ALTER 權限。
使用 SQL Server Management Studio
停用複製的外鍵約束
在 [物件總管]中,展開要修改外鍵約束的資料表,然後展開 [索引鍵] 資料夾。
以滑鼠右鍵按一下外鍵約束,然後選取 [修改]。
在 [外部索引鍵關聯性] 對話方塊中,針對 [強制複寫] 選取 [否]值。
選取 [關閉]。
使用 Transact-SQL
停用複寫的外鍵約束
若要在 Transact-SQL 中執行此工作,請編寫外部索引鍵條件約束。 在 [物件總管] 中,展開具有您要修改的外鍵約束的資料表,然後展開 [索引鍵] 資料夾。
以滑鼠右鍵按一下外部索引鍵條件約束,選取 [編寫索引鍵指令碼為],然後選取 [DROP 和 CREATE 至],然後選取 [新增查詢編輯器視窗]。 產生的指令碼看起來應該類似下列
AdventureWorks2022
範例資料庫中的範例:ALTER TABLE [Sales].[SalesTerritoryHistory] DROP CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] GO ALTER TABLE [Sales].[SalesTerritoryHistory] WITH CHECK ADD CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] FOREIGN KEY([BusinessEntityID]) REFERENCES [Sales].[SalesPerson] ([BusinessEntityID]); GO ALTER TABLE [Sales].[SalesTerritoryHistory] CHECK CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] GO
在指令碼的
ALTER TABLE ... ADD CONSTRAINT
部分中,修改新的外鍵約束條件,並指定 NOT FOR REPLICATION 選項。 例如:ALTER TABLE [Sales].[SalesTerritoryHistory] DROP CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] GO ALTER TABLE [Sales].[SalesTerritoryHistory] WITH CHECK ADD CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] FOREIGN KEY([BusinessEntityID]) REFERENCES [Sales].[SalesPerson] ([BusinessEntityID]) NOT FOR REPLICATION; --added to disable constraint for replication GO ALTER TABLE [Sales].[SalesTerritoryHistory] CHECK CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] GO