sp_check_for_sync_trigger (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

ユーザー定義トリガーまたはストアド プロシージャが、サブスクリプションの即時更新に使用されるレプリケーション トリガーのコンテキストで呼び出されているかどうかを判断します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースまたはサブスクリプション データベースのサブスクライバー側で実行されます。

Transact-SQL 構文表記規則

構文

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

引数

[ @tabid = ] tabid

即時更新トリガーをチェックするテーブルのオブジェクト ID。 @tabidint で、既定値はありません。

[ @trigger_op = ] 'trigger_op' OUTPUT

出力パラメーターが呼び出されるトリガーの型を返すかどうかを指定します。 @trigger_op は、 char(10)型の OUTPUT パラメーターであり、次のいずれかの値を指定できます。

Value 説明
Ins INSERT トリガー
Upd UPDATE トリガー
Del DELETE トリガー
NULL (既定)

[ @fonpublisher = ] fonpublisher

ストアド プロシージャの実行場所を指定します。 @fonpublisherbit で、既定値は 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_trigger0を返した場合、ユーザー定義トリガーは処理を続行します。 sp_check_for_sync_trigger1を返すと、ユーザー定義トリガーが終了します。 これにより、レプリケーション トリガーがテーブルを更新するときに、ユーザー定義トリガーが起動しないようにします。

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. パブリッシャー テーブルのトリガーにコードを追加する

このコードは、パブリッシャーのテーブルのトリガーに追加することもできます。コードは似ていますが、 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;

アクセス許可

sys.objects システム ビューでSELECT権限を持つユーザーは、sp_check_for_sync_triggerを実行できます。