次の方法で共有


結合の追加と編集

[結合の追加] ダイアログ ボックスおよび [結合の編集] ダイアログ ボックスでは、マージ パブリケーションに使用する結合フィルタの追加と編集を行えます。

注意

既存のパブリケーションのフィルタを編集するには、パブリケーションの新しいスナップショットが必要です。パブリケーションにサブスクリプションが存在する場合、このサブスクリプションを再初期化する必要があります。プロパティの変更の詳細については、「パブリケーションおよびアーティクルのプロパティの変更」を参照してください。

結合フィルタを使用すると、パブリケーションにおける関連するテーブルのフィルタ方法に基づいて、テーブルにフィルタを適用できます。一般的に、親テーブルにはパラメータ化された行フィルタが適用されます。次に、テーブル間の結合を定義するときとほぼ同じ方法で、1 つ以上の結合フィルタを定義します。この結合フィルタにより、関連するテーブル内のデータが結合フィルタ句と一致する場合にのみレプリケートされるように、行フィルタが拡張されます。

通常、結合フィルタは適用先のテーブルに定義されている主キー/外部キーのリレーションシップに従いますが、これに厳密に限定されてはいません。結合フィルタは、2 つのアーティクル テーブル内の関連するデータを比較する、任意のロジックに基づくことができます。

重要な注意事項重要

結合フィルタに使用できるテーブルの数に制限はありませんが、多数のテーブルをフィルタに使用すると、マージ処理中のパフォーマンスに影響する場合があります。5 個以上のテーブルを使用する結合フィルタを生成する場合、小さいテーブルや変更を受けないテーブル、プライマリ参照テーブルにはフィルタを適用しないなどの方法も検討してみてください。サブスクライバの間で分割する必要があるテーブル間にのみ、結合フィルタを使用してください。

オプション

このダイアログ ボックスでは、3 つの手順で 2 つのテーブル間の結合フィルタを作成します。結合フィルタを複数作成するには、このダイアログ ボックスの手順を複数回繰り返す必要があります。

  1. [フィルタ選択されたテーブルを確認し、結合テーブルを選択します]

    • 新しい結合を追加する場合、[フィルタ選択されたテーブル] テキスト ボックス内のテーブルが適切かどうか確認します。適切でない場合には [キャンセル] をクリックし、[テーブル行のフィルタ選択] ページで正しいテーブルを選択して、[結合の追加] をクリックし、このダイアログ ボックスに戻ります。次に、[結合テーブル] ドロップダウン リスト ボックスでテーブルを選択します。

    • 既存の結合を編集する場合、テーブル名は既に指定されており、変更できません。結合に使用されるテーブルを変更するには、[テーブル行のフィルタ選択] ページで既存の結合フィルタを削除して、別のテーブルの間に新しい結合を作成する必要があります。

  2. [JOIN ステートメントを作成します]

    • 新しい結合を追加する場合、[ビルダを使用してステートメントを作成する] または [JOIN ステートメントを手動で作成する] を選択します。結合を手動で作成する場合、ビルダは使用できません。

      ビルダの使用を選択した場合、グリッド内の列 ([結合][フィルタ選択されたテーブルの列][演算子][結合テーブルの列]) を使用して JOIN ステートメントを作成します。グリッド内の各列にはドロップダウン リスト ボックスがあり、これを使用して 2 つの列と演算子 ([=][<>][<=][<][>=][>][like]) を選択できます。結果は [プレビュー] テキスト領域に表示されます。結合に列が 2 組以上使用される場合には、[結合] 列で結合 ([AND] または [OR]) を選択し、2 つの列と別の演算子を入力します。

      ステートメントを手動で作成する場合、[JOIN ステートメント] テキスト領域に JOIN ステートメントを入力します。[フィルタ選択されたテーブルの列] リスト ボックスと [結合テーブルの列] リスト ボックスを使用して、列を [結合テーブルの列] テキスト領域にドラッグ アンド ドロップします。

    • 既存の結合を編集する場合、手動で編集する必要があります。

  3. [結合オプションを指定します]

    • フィルタ選択するテーブル内で結合する列が一意な場合、[一意キー : フィルタ選択されたテーブルの 1 つの行に関連する結合テーブル内の行 (一対一または一対多の関係)] を選択します。列が一意の場合、特別なパフォーマンスの最適化機能をマージ処理で利用できます。

      注記注意

      このオプションを選択すると、結合フィルタにおける子テーブルと親テーブルのリレーションシップが一対一または一対多となるように指定されます。親テーブル内の結合する列に一意性を保証する制約がある場合にのみ、このオプションを選択してください。このオプションを適切に設定しなかった場合、データを収束できない可能性があります。

    • Microsoft SQL Server 2005 以降のバージョンのみです。既定で、マージ レプリケーションでは同期中に行ごとに変化が処理されます。関連する変更をまとめて処理するには、[論理レコード : フィルタ選択されたテーブルと結合テーブルの関連する変更を同期時にトランザクションとして扱う] を選択します。このオプションは、論理レコードを使用するために必要なアーティクルとパブリケーションの要件が満たされている場合にのみ使用できます。詳細については、「論理レコードによる関連行への変更のグループ化」の「論理レコードによる関連行への変更のグループ化」を参照してください。

フィルタを追加または編集した後で [OK] をクリックすると、変更が保存され、ダイアログ ボックスが閉じます。指定したフィルタは解析され、SELECT 句の中のテーブルに対して実行されます。フィルタ ステートメントに構文エラーなどの問題がある場合には通知され、フィルタ ステートメントを編集することができます。