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 不带默认值。
[@trigger_op = ] “trigger_output_parameters” OUTPUT
指定输出参数是否返回正在调用它的触发器的类型。 trigger_output_parameters为 char(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 权限的任何用户执行。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈