マージ アーティクルに対してストアド プロシージャ ベースのカスタム競合回避モジュールを実装する方法 (レプリケーション Transact-SQL プログラミング)

各パブリッシャで、固有のカスタム競合回避モジュールを Transact-SQL ストアド プロシージャとして記述できます。同期中に、このストアド プロシージャは、競合回避モジュールが登録されているアーティクル内で競合が発生した場合に呼び出されます。競合する行の情報は、マージ エージェントによってプロシージャの必須パラメータに渡されます。ストアド プロシージャ ベースのカスタム競合回避モジュールは、常にパブリッシャで作成されます。

注意注意

MicrosoftSQL Server ストアド プロシージャの競合回避モジュールは、行の変更ベースの競合を処理するためにのみ呼び出されます。このモジュールは、他の種類の競合 (PRIMARY KEY 違反による挿入の失敗や一意インデックス制約違反) の処理には使用できません。

ストアド プロシージャ ベースのカスタム競合回避モジュールを作成するには

  1. パブリッシャのパブリケーションまたは msdb データベースで、次の必須パラメータを実装する新しいシステム ストアド プロシージャを作成します。

    パラメータ

    データ型

    説明

    @tableowner

    sysname

    競合を解決する対象のテーブルの所有者名。これは、パブリケーション データベース内のテーブルの所有者です。

    @tablename

    sysname

    競合を解決する対象のテーブル名。

    @rowguid

    uniqueidentifier

    競合している行の一意の識別子。

    @subscriber

    sysname

    競合する変更の反映元であるサーバーの名前。

    @subscriber_db

    sysname

    競合する変更の反映元であるデータベースの名前。

    @log_conflict OUTPUT

    int

    競合を後で解決できるように、マージ処理で競合をログに記録するかどうかを指定します。

    0 = 競合をログに記録しない。

    1 = サブスクライバは競合で優先されない。

    2 = パブリッシャは競合で優先されない。

    @conflict_message OUTPUT

    nvarchar(512)

    競合をログに記録する場合の解決に関するメッセージ。

    @destowner

    sysname

    サブスクライバ側でパブリッシュされたテーブルの所有者。

    このストアド プロシージャは、マージ エージェントからパラメータに渡された値を使用して、カスタム競合回避ロジックを実装します。このロジックでは、ベース テーブルと同じ構造を持ち、競合で優先されたバージョンの行のデータ値を含んでいる、単一行の結果セットを返す必要があります。

  2. サブスクライバでパブリッシャへの接続に使用される任意のログインに対して、ストアド プロシージャの EXECUTE 権限を許可します。

新しいテーブル アーティクルにカスタム競合回避モジュールを使用するには

既存のテーブル アーティクルにカスタム競合回避モジュールを使用するには

  1. @publication@article を指定し、@propertyarticle_resolver の値を、@valueMicrosoftSQL Server Stored ProcedureResolver の値を指定して、sp_changemergearticle を実行します。

  2. @publication@article を指定し、@propertyresolver_info の値を、@value に競合回避ロジックを実装するストアド プロシージャの名前を指定して、sp_changemergearticle を実行します。