Триггер SQL Server при репликации - PullRequest
4 голосов
/ 12 февраля 2009

Мне нужно создать базу данных SQL Server, которая будет получать обновления с помощью какого-либо механизма репликации из другой базы данных. Мне нужно написать триггеры вставки, обновления и удаления, которые будут выполняться при возникновении этой репликации.

У меня есть опыт работы с триггерами, но не с репликацией.

Должен ли я использовать репликацию транзакций или слиянием, или это имеет значение?

Будет ли запускаться триггер, предназначенный для запуска при выполнении простого оператора вставки SQL, при репликации?

Ответы [ 4 ]

4 голосов
/ 12 февраля 2009

Ну, это зависит.

Если обновления, которые вы намереваетесь применить, относятся к изолированным таблицам, т. Е. Все данные для данной таблицы поступают только от издателя, то вы можете использовать репликацию транзакций.

Если, с другой стороны, вы хотите объединить содержимое таблицы, то есть таблицу заказов, с заказами, размещаемыми на обоих сайтах, то вам следует использовать репликацию слиянием.

Что касается триггеров, существует конфигурация «не для репликации», которую можно применять для управления их поведением. См. Следующую статью для справки.

http://msdn.microsoft.com/en-us/library/ms152529.aspx

Ура, Джон

4 голосов
/ 12 февраля 2009

Синтаксис CREATE TRIGGER на MSDN :

CREATE TRIGGER
...
[ NOT FOR REPLICATION ] 

Это означает, что выполнение при репликации является поведением по умолчанию для триггеров, и его можно отключить, указав NOT FOR REPLICATION.

2 голосов
/ 16 февраля 2009

Трудно ответить на ваш вопрос с информацией, которую вы предоставили. Я добавил несколько комментариев к вашему вопросу с просьбой дать разъяснения.

Вот статья на MSDN, которая должна помочь: http://msdn.microsoft.com/en-us/library/ms152529.aspx

По умолчанию триггеры будут срабатывать во время репликации, если не указано «НЕ ДЛЯ РЕПЛИКАЦИИ». Они работают так же, как и для простых операторов вставки.

Транзакционная репликация и репликация слиянием очень разные, но триггеры ведут себя одинаково для обоих вариантов.

0 голосов
/ 16 февраля 2009

Есть несколько альтернативных вариантов, открытых вместо триггеров.

  1. Вы можете изменить процедуры репликации в базе данных подписчика (получателя).
  2. Если вы используете 2008, вы можете использовать отслеживание изменений на подписчике для таблиц, с которыми вы хотите «сделать что-то», а затем создать пакетный процесс для обработки данных «на основе набора» вместо отдельных строк. Например. пакет служб SSIS, который запускается каждый X.
...