sp_check_for_sync_trigger (Transact-SQL)
确定在用于立即更新订阅的复制触发器的上下文中,是否正在调用用户定义的触发器或存储过程。 此存储过程在发布服务器的发布数据库中或在订阅服务器的订阅数据库中执行。
语法
sp_check_for_sync_trigger [ @tabid = ] 'tabid'
[ , [ @trigger_op = ] 'trigger_output_parameters' OUTPUT ]
[ , [ @fonpublisher = ] fonpublisher ]
参数
[@tabid = ] 'tabid'
正对其进行即时更新触发器检查的表的对象 ID。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