sp_check_for_sync_trigger (Transact-SQL)
Определяет, вызывается ли пользовательский триггер или хранимая процедура в контексте триггера репликации, который используется для немедленно обновляемых подписок. Эта хранимая процедура выполняется на издателе в базе данных публикации или на подписчике в базе данных подписки.
Синтаксис
sp_check_for_sync_trigger [ @tabid = ] 'tabid'
[ , [ @trigger_op = ] 'trigger_output_parameters' OUTPUT ]
[ , [ @fonpublisher = ] fonpublisher ]
Аргументы
[@tabid = ] 'tabid'
Проверяется ли идентификатор таблицы на предмет немедленного обновления триггеров. Аргумент tabid имеет тип int и не имеет значения по умолчанию.[@trigger_op = ] 'trigger_output_parameters' OUTPUT
Указывает, будет ли возвращаемый параметр содержать тип вызывающего триггера. Аргумент trigger_output_parameters имеет тип char(10) и может принимать одно из следующих значений.Значение
Описание
Ins
триггер INSERT
Upd
триггер UPDATE
Del
триггер DELETE
NULL (по умолчанию)
[ @fonpublisher = ] fonpublisher
Указывает место выполнения хранимой процедуры. Аргумент fonpublisher имеет тип bit и значение по умолчанию 0. Если значение равно 0, тогда выполнение происходит на подписчике, а если 1, то выполнение происходит на издателе.
Значения кодов возврата
0 указывает на то, что хранимая процедура не вызывается внутри контекста немедленно обновляющегося триггера. 1 указывает на то, что вызов происходит внутри контекста немедленно обновляющегося триггера, а тип триггера записывается в аргументе @trigger_op.
Замечания
Процедура sp_check_for_sync_trigger используется при репликации моментальных снимков, а также при репликации транзакций.
Процедура sp_check_for_sync_trigger используется для координации между репликацией и пользовательскими триггерами. Эта хранимая процедура определяет, была ли она вызвана в контексте триггера репликации. Например, можно вызвать процедуру sp_check_for_sync_trigger в теле определяемого пользователем триггера. Если процедура sp_check_for_sync_trigger возвращает значение 0, пользовательский триггер продолжает работу. Если процедура sp_check_for_sync_trigger возвращает значение 1, пользовательский триггер завершает работу. Это гарантирует, что определяемый пользователем триггер не срабатывает при обновлении таблицы триггером репликации.
Пример
В следующем примере показан код, который может использоваться в триггере таблицы подписчика.
DECLARE @retcode int, @trigger_op char(10), @table_id int
SELECT @table_id = object_id('tablename')
EXEC @retcode = sp_check_for_sync_trigger @table_id, @trigger_op OUTPUT
IF @retcode = 1
RETURN
Код также можно добавить в триггер таблицы издателя, это аналогичный код, однако вызов процедуры sp_check_for_sync_trigger содержит дополнительный параметр.
DECLARE @retcode int, @trigger_op char(10), @table_id int, @fonpublisher int
SELECT @table_id = object_id('tablename')
SELECT @fonpublisher = 1
EXEC @retcode = sp_check_for_sync_trigger @table_id, @trigger_op OUTPUT, @fonpublisher
IF @retcode = 1
RETURN
Разрешения
Хранимую процедуру sp_check_for_sync_trigger может выполнять любой пользователь, обладающий разрешениями SELECT в системном представлении sys.objects.