sp_check_for_sync_trigger (Transact-SQL)

适用于: SQL Server Azure SQL 托管实例

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

Transact-SQL 语法约定

语法

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

参数

[ @tabid = ] tabid

正在检查的表的对象 ID,以便立即更新触发器。 @tabid为 int,无默认值。

[ @trigger_op = ] 'trigger_op' OUTPUT

指定输出参数是否返回从中调用的触发器类型。 @trigger_op是 char(10)类型的 OUTPUT 参数,可以是这些值之一。

说明
Ins INSERT 触发
Upd UPDATE 触发
Del 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;

权限

具有 SELECT sys.objects 系统视图中权限的任何用户都可以执行sp_check_for_sync_trigger