Compartir a través de


sp_check_for_sync_trigger (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Determina si se llama a un desencadenador o procedimiento almacenado definido por el usuario en el contexto de un desencadenador de replicación, que se usa para las suscripciones de actualización inmediata. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicación o en el suscriptor de la base de datos de suscripciones.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

[ @tabid = ] tabid

Identificador de objeto de la tabla que se está comprobando para los desencadenadores de actualización inmediata. @tabid es int, sin ningún valor predeterminado.

[ @trigger_op = ] SALIDA 'trigger_op'

Especifica si el parámetro de salida es devolver el tipo de desencadenador desde el que se llama. @trigger_op es un parámetro OUTPUT de tipo char(10) y puede ser uno de estos valores.

Valor Descripción
Ins INSERT detonante
Upd UPDATE detonante
Del DELETE detonante
NULL (valor predeterminado)

[ @fonpublisher = ] fonpublisher

Especifica la ubicación donde el procedimiento almacenado se ejecuta. @fonpublisher es bit, con un valor predeterminado de 0.

  • Si 0es , la ejecución se encuentra en el suscriptor.
  • Si 1es , la ejecución se encuentra en el publicador.

Valores de código de retorno

0 indica que no se llama al procedimiento almacenado en el contexto de un desencadenador de actualización inmediata. 1 indica que se está llamando en el contexto de un desencadenador de actualización inmediata y es el tipo de desencadenador que se devuelve en @trigger_op.

Comentarios

sp_check_for_sync_trigger se usa en la replicación de instantáneas y la replicación transaccional.

sp_check_for_sync_trigger se usa para coordinar entre la replicación y los desencadenadores definidos por el usuario. Este procedimiento almacenado determina si se llama dentro del contexto de un desencadenador de replicación. Por ejemplo, puede llamar al procedimiento sp_check_for_sync_trigger en el cuerpo de un desencadenador definido por el usuario. Si sp_check_for_sync_trigger devuelve 0, el desencadenador definido por el usuario continúa procesando. Si sp_check_for_sync_trigger devuelve 1, se cierra el desencadenador definido por el usuario. Esto garantiza que el desencadenador definido por el usuario no se active cuando el desencadenador de replicación actualiza la tabla.

Ejemplos

A Adición de código a un desencadenador en una tabla de suscriptor

En el ejemplo siguiente se muestra código que se podría utilizar en un desencadenador de una tabla del suscriptor.

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. Adición de código a un desencadenador en una tabla de Publisher

El código también se puede agregar a un desencadenador en una tabla del publicador; el código es similar, pero la llamada a sp_check_for_sync_trigger incluye un parámetro adicional.

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;

Permisos

Cualquier usuario con SELECT permisos en la vista del sistema sys.objects puede ejecutar sp_check_for_sync_trigger.