Поделиться через


sp_check_for_sync_trigger (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в 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.