停用複寫的外部索引鍵條件約束
適用於: SQL Server 2016 (13.x) 和更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
您可以使用 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