sp_check_for_sync_trigger (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

确定是否正在用于立即更新订阅的复制触发器的上下文中调用用户定义的触发器或存储过程。 该存储过程在发布服务器的发布数据库中或在订阅服务器的订阅数据库中执行。

Transact-SQL 语法约定

语法

sp_check_for_sync_trigger [ @tabid = ] 'tabid'   
    [ , [ @trigger_op = ] 'trigger_output_parameters' OUTPUT ]  
    [ , [ @fonpublisher = ] fonpublisher ]  

参数

[@tabid = ]'tabid'
正对检查即时更新触发器的表的对象 ID。 tabidint ,无默认值。

[@trigger_op = ]“trigger_output_parameters”输出
指定输出参数是否返回正在调用它的触发器的类型。 trigger_output_parameterschar (10) ,可以是以下值之一。

说明
Ins INSERT 触发器
Upd UPDATE 触发器
Delete DELETE 触发器
NULL(默认值)

[ @fonpublisher = ] fonpublisher 指定执行存储过程的位置。 fonpublisher,默认值为 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,则用户定义的触发器将退出。 这将确保当复制触发器更新表时不会激发用户定义触发器。

示例

A. 向订阅服务器表上的触发器添加代码

以下示例说明了可在订阅服务器表的触发器中使用的代码。

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  

B. 向 Publisher 表上的触发器添加代码

还可以将代码添加到发布服务器上的表上的触发器中;代码类似,但对 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 存储过程可由 sys.objects 系统视图中具有 SELECT 权限的任何用户执行。

另请参阅

Updatable Subscriptions for Transactional Replication