Отключение ограничений внешнего ключа для репликации

Область применения: SQL Server 2016 (13.x) и более поздних версий Управляемого экземпляраБазы данныхSQL Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)

Ограничения внешнего ключа для репликации в SQL Server можно отключить с помощью SQL Server Management Studio или Transact-SQL. Это может быть полезно, если вы публикуете данные из предыдущей версии SQL Server.

Заметка

Если таблица публикуется для репликации, ограничения внешнего ключа для нее автоматически отключаются в случае операций, выполняемых агентами репликации. Параметр NOT FOR REPLICATION по умолчанию задается для ограничений внешнего ключа и проверочных ограничений. Ограничения используются для пользовательских операций, но не для операций агентов. Когда агент репликации на подписчике выполняет вставку, обновление или удаление, ограничение не проверяется. Если эту же операцию выполняет пользователь, ограничение проверяется. Ограничение отключено для агента репликации по той причине, что оно уже проверено на издателе при выполнении исходной операции вставки, обновления или удаления данных.

Разрешения

Требуется разрешение ALTER на таблицу.

Использование среды SQL Server Management Studio

Отключение ограничения внешнего ключа для репликации

  1. В обозревателе объектовраскройте таблицу, содержащую ограничение внешнего ключа, которое необходимо изменить, а затем разверните папку Ключи .

  2. Правой кнопкой мыши щелкните ограничение, а затем выберите команду Изменить.

  3. В диалоговом окне Связи по внешнему ключу выберите значение Нет для параметра Включить использование для репликации.

  4. Нажмите Закрыть.

Использование Transact-SQL

Отключение ограничения внешнего ключа для репликации

  1. Чтобы выполнить эту задачу в Transact-SQL, выполните скрипт с ограничением внешнего ключа. В обозревателе объектовраскройте таблицу, содержащую ограничение внешнего ключа, которое необходимо изменить, а затем разверните папку Ключи .

  2. Щелкните правой кнопкой мыши ограничение внешнего ключа, выберите пункт Метод создания скрипта для ключа, затем выберите Удалить и создать в… и Новое окно редактора запросов. Полученный скрипт похож на следующий пример из образца базы данных 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
    

Далее