Управление ограничениями, идентификаторами и триггерами с помощью параметра «NOT FOR REPLICATION»
В некоторых случаях желательно отличать пользовательскую деятельность в топологии репликации от деятельности агентов. Например если строка вставлена пользователем на издателе, и эта вставка удовлетворяет проверочному ограничению в таблице, тогда возможно не потребуется устанавливать то же самое ограничение при вставке строки агентом репликации на подписчике. Параметр NOT FOR REPLICATION позволяет указывать, что при выполнении операции агентом репликации следующие объекты базы данных обрабатываются иначе:
Ограничения внешнего ключа
При выполнении агентом репликации операций вставки обновления или удаления ограничение внешнего ключа не устанавливается.
Проверочные ограничения
При выполнении агентом репликации операций вставки обновления или удаления проверочное ограничение не устанавливается.
Столбцы идентификаторов
При выполнении агентом репликации операции вставки значение столбца идентификаторов не увеличивается.
Триггеры
При выполнении агентом репликации операций вставки обновления или удаления триггер не выполняется.
При публикации таблицы параметры схемы управляют созданием объектов в базе данных подписки. Параметры схемы по умолчанию зависят от публикации. Если они установлены на указание ограничений внешнего ключа, а в базе данных подписки создаются проверочные ограничения, устанавливается параметр NOT FOR REPLICATION. Параметр NOT FOR REPLICATION также устанавливается при репликации столбцов идентификаторов в публикациях слиянием и публикациях транзакций, которые поддерживают обновляемые подписки. Дополнительные сведения о репликации столбцов идентификаторов см. в разделе Репликация столбцов идентификаторов.
В большинстве случаев могут использоваться настройки по умолчанию, однако если для приложения требуется другая логика поведения, настройки можно изменить. Основной областью рассмотрения являются триггеры. Например если определить триггер вставки с установленным параметром NOT FOR REPLICATION, то все пользовательские вставки вызывают срабатывание триггера, а вставки агентов репликации не запускают триггер. Рассмотрим триггер, который вставляет данные в таблицу отслеживания: при первоначальной вставке строки пользователем уместно, чтобы триггер включался и вводил строку в отслеживающую таблицу, однако триггер не должен включаться, когда данные реплицируются на подписчик, так как это привело бы к вставке ненужной строки в таблицу отслеживания.
Указание параметра NOT FOR REPLICATION
Параметр NOT FOR REPLICATION можно указывать следующими способами.
Используя параметры схемы репликации. Дополнительные сведения см. в разделах Как указать параметры схемы (среда SQL Server Management Studio) и Как задать параметры схемы (программирование репликации на языке Transact-SQL).
Напрямую в синтаксисе Transact-SQL или в MicrosoftSQL Server Management Studio:
при создании или изменении объекта в базе данных публикации;
при создании или изменении объекта в базе данных подписки. Как правило, объекты создаются вручную (а не репликацией), только если подписка инициализируется без моментального снимка.
Дополнительные сведения см. в следующих разделах.
Инструкция CREATE TABLE (Transact-SQL), ALTER TABLE (Transact-SQL), CREATE TRIGGER (Transact-SQL) и ALTER TRIGGER (Transact-SQL)
Как отключить ограничения внешнего ключа для репликации (визуальные инструменты для баз данных)
Как отключить проверочные ограничения для репликации (визуальные инструменты для баз данных)