Отключение ограничений внешнего ключа для репликации
Область применения: SQL Server 2016 (13.x) и более поздних
версий База данных SQL Azure Управляемый экземпляр SQL Azure
Azure Synapse Analytics Analytics
Platform System (PDW)
Ограничения внешнего ключа для репликации в SQL Server можно отключить с помощью SQL Server Management Studio или Transact-SQL. Это может быть полезно, если вы публикуете данные из предыдущей версии SQL Server.
Примечание.
Если таблица публикуется для репликации, ограничения внешнего ключа для нее автоматически отключаются в случае операций, выполняемых агентами репликации. Параметр NOT FOR REPLICATION по умолчанию задается для ограничений внешнего ключа и проверочных ограничений. Ограничения используются для пользовательских операций, но не для операций агентов. Когда агент репликации на подписчике выполняет вставку, обновление или удаление, ограничение не проверяется. Если эту же операцию выполняет пользователь, ограничение проверяется. Ограничение отключено для агента репликации по той причине, что оно уже проверено на издателе при выполнении исходной операции вставки, обновления или удаления данных.
Разрешения
Требуется разрешение ALTER на таблицу.
Использование SQL Server Management Studio
Отключение ограничения внешнего ключа для репликации
В обозревателе объектовраскройте таблицу, содержащую ограничение внешнего ключа, которое необходимо изменить, а затем разверните папку Ключи .
Правой кнопкой мыши щелкните ограничение, а затем выберите команду Изменить.
В диалоговом окне Связи по внешнему ключу выберите значение Нет для параметра Включить использование для репликации.
Выберите Закрыть.
Использование Transact-SQL
Отключение ограничения внешнего ключа для репликации
Чтобы выполнить эту задачу в Transact-SQL, выполните скрипт с ограничением внешнего ключа. В обозревателе объектовраскройте таблицу, содержащую ограничение внешнего ключа, которое необходимо изменить, а затем разверните папку Ключи .
Щелкните правой кнопкой мыши ограничение внешнего ключа, выберите пункт Метод создания скрипта для ключа, затем выберите Удалить и создать в… и Новое окно редактора запросов. Полученный скрипт похож на следующий пример из образца базы данных
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