Управление ограничениями, идентификаторами и триггерами с помощью параметра «NOT FOR REPLICATION»

В некоторых случаях желательно отличать пользовательскую деятельность в топологии репликации от деятельности агентов. Например если строка вставлена пользователем на издателе, и эта вставка удовлетворяет проверочному ограничению в таблице, тогда возможно не потребуется устанавливать то же самое ограничение при вставке строки агентом репликации на подписчике. Параметр NOT FOR REPLICATION позволяет указывать, что при выполнении операции агентом репликации следующие объекты базы данных обрабатываются иначе:

  • Ограничения внешнего ключа

    При выполнении агентом репликации операций вставки обновления или удаления ограничение внешнего ключа не устанавливается.

  • Проверочные ограничения

    При выполнении агентом репликации операций вставки обновления или удаления проверочное ограничение не устанавливается.

  • Столбцы идентификаторов

    При выполнении агентом репликации операции вставки значение столбца идентификаторов не увеличивается.

  • Триггеры

    При выполнении агентом репликации операций вставки обновления или удаления триггер не выполняется.

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

В большинстве случаев могут использоваться настройки по умолчанию, однако если для приложения требуется другая логика поведения, настройки можно изменить. Основной областью рассмотрения являются триггеры. Например если определить триггер вставки с установленным параметром NOT FOR REPLICATION, то все пользовательские вставки вызывают срабатывание триггера, а вставки агентов репликации не запускают триггер. Рассмотрим триггер, который вставляет данные в таблицу отслеживания: при первоначальной вставке строки пользователем уместно, чтобы триггер включался и вводил строку в отслеживающую таблицу, однако триггер не должен включаться, когда данные реплицируются на подписчик, так как это привело бы к вставке ненужной строки в таблицу отслеживания.

Указание параметра NOT FOR REPLICATION

Параметр NOT FOR REPLICATION можно указывать следующими способами.