停用複寫的外部索引鍵條件約束

適用於:SQL Server 2016 (13.x) 和更新版本Azure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

您可以使用 SQL Server Management Studio 或 Transact-SQL 來停用 SQL Server 中的外部索引鍵條件約束。 這有助於從舊版 SQL Server 發行資料。

注意

如果使用複寫發行資料表,則會自動停用複寫代理程式所執行作業的外部索引鍵條件約束。 依預設,NOT FOR REPLICATION 選項將指定給外部索引鍵條件約束和檢查條件約束;條件約束對使用者作業而非代理程式作業強制執行。 當複寫代理程式在訂閱者端執行插入、更新或刪除時,不會檢查條件約束;如果使用者執行插入、更新或刪除,則會檢查條件約束。 停用複製代理程式的條件約束,是因為原本插入、更新或刪除資料時,就已在發行者端檢查過條件約束。

權限

需要資料表的 ALTER 權限。

使用 SQL Server Management Studio

停用複寫的外部索引鍵條件約束

  1. [物件總管]中,展開您要修改其外部索引鍵條件約束的資料表,然後展開 [索引鍵] 資料夾。

  2. 以滑鼠右鍵按一下外部索引鍵條件約束,然後選取 [修改]。

  3. [外部索引鍵關聯性] 對話方塊中,針對 [強制複寫] 選取 [否]值。

  4. 選取 [關閉]。

使用 Transact-SQL

停用複寫的外部索引鍵條件約束

  1. 若要在 Transact-SQL 中執行此工作,請編寫外部索引鍵條件約束。 在 [物件總管]中,展開您要修改其外部索引鍵條件約束的資料表,然後展開 [索引鍵] 資料夾。

  2. 以滑鼠右鍵按一下外部索引鍵條件約束,選取 [編寫索引鍵指令碼為],然後選取 [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
    
  3. 在指令碼的 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
    

後續步驟