sp_check_for_sync_trigger (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
ユーザー定義トリガーまたはストアド プロシージャが、サブスクリプションの即時更新に使用されるレプリケーション トリガーのコンテキストで呼び出されているかどうかを判断します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースまたはサブスクリプション データベースのサブスクライバー側で実行されます。
構文
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 は 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
を返すと、ユーザー定義トリガーが終了します。 これにより、レプリケーション トリガーがテーブルを更新するときに、ユーザー定義トリガーが起動しないようにします。
例
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
を実行できます。