次の方法で共有


マージ アーティクル間の結合フィルタを定義および変更する方法 (SQL Server Management Studio)

パブリケーションの新規作成ウィザードの [テーブル行のフィルタ選択] ページまたは [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスの [行のフィルタ選択] ページで、結合フィルタを定義、変更、または削除します。このウィザードの使用とダイアログ ボックスへのアクセスの詳細については、「パブリケーションを作成してアーティクルを定義する方法 (SQL Server Management Studio)」および「パブリケーションとアーティクルのプロパティを表示および変更する方法 (SQL Server Management Studio)」を参照してください。

注意

パブリケーションに対するサブスクリプションが初期化された後に、[パブリケーションのプロパティ - <Publication>] ダイアログ ボックスで結合フィルタを追加、変更、および削除した場合は、変更を行った後で、新しいスナップショットを生成し、すべてのサブスクリプションを再初期化する必要があります。プロパティ変更の要件の詳細については、「パブリケーションおよびアーティクルのプロパティの変更」を参照してください。

結合フィルタは、一連のテーブルに対して手動で作成できます。また、テーブルに定義された外部キーと主キーのリレーションシップに基づいて、レプリケーションによって自動的に生成することもできます。一連の結合フィルタを自動的に生成する方法の詳細については、「マージ アーティクル間の一連の結合フィルタを自動的に生成する方法 (SQL Server Management Studio)」を参照してください。

結合フィルタを定義するには

  1. パブリケーションの新規作成ウィザードの [テーブル行のフィルタ選択] ページ、または [パブリッシャのプロパティ - <Publication>][行のフィルタ選択] ページで、[フィルタ選択されたテーブル] ペイン内の既存の行フィルタまたは結合フィルタを選択します。

    注意

    結合フィルタを作成するには、パブリケーションに少なくとも 2 つの関連テーブルを含める必要があります。結合フィルタは、行フィルタを拡張したものです。そのため、結合を使用して行フィルタを別のテーブルに拡張するには、先に 1 つのテーブルの行フィルタを定義する必要があります。結合フィルタを 1 つ定義すると、パブリケーションに追加の関連テーブルが含まれている場合、この結合フィルタは別の結合フィルタを使用して拡張できます。

  2. [追加] をクリックし、[選択したフィルタを拡張するために結合を追加する] をクリックします。

  3. JOIN ステートメントを作成します。[ビルダを使用してステートメントを作成する] または [JOIN ステートメントを手動で作成する] を選択します。

    • ビルダを使用するように選択した場合は、グリッド内の列 ([結合][フィルタ選択されたテーブルの列][演算子]、および [結合テーブル列]) を使用して、JOIN ステートメントを作成します。

      グリッド内の各列には、ドロップダウン コンボ ボックスが含まれており、2 つの列と 1 つの演算子 ([=][<>][<=][<][>=][>]、および [like]) を選択できます。結果は [プレビュー] テキスト領域に表示されます。結合に列のペアを複数個含める場合は、[結合] 列から結合 (AND または OR) を選択し、さらに 2 つの列と 1 つの演算子を入力します。

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

    • 完成した JOIN ステートメントは、次のように表示されます。

      SELECT <published_columns> FROM [Sales].[SalesOrderHeader] INNER JOIN [Sales].[SalesOrderDetail] ON [SalesOrderHeader].[SalesOrderID] = [SalesOrderDetail].[SalesOrderID]
      

      JOIN 句には、2 つの部分で構成されている名前を使用する必要があります。3 つまたは 4 つの部分で構成されている名前の使用はサポートされていません。

  4. 結合オプションを指定します。

    • フィルタ選択されたテーブル (親テーブル) 内での結合先の列が一意である場合は、[一意キー] を選択します。

      注記注意

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

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

  5. [OK] をクリックします。

  6. [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスが表示されている場合は、[OK] をクリックして保存し、ダイアログ ボックスを閉じます。

結合フィルタを変更するには

  1. パブリケーションの新規作成ウィザードの [テーブル行のフィルタ選択] ページ、または [パブリケーションのプロパティ - <Publication>][行のフィルタ選択] ページで、[フィルタ選択されたテーブル] ペイン内のフィルタを選択し、[編集] をクリックします。

  2. [結合の編集] ダイアログ ボックスで、フィルタを変更します。

  3. [OK] をクリックします。

結合フィルタを削除するには

  • パブリケーションの新規作成ウィザードの [テーブル行のフィルタ選択] ページ、または [パブリケーションのプロパティ - <Publication>][行のフィルタ選択] ページで、[フィルタ選択されたテーブル] ペイン内のフィルタを選択し、[削除] をクリックします。削除する結合フィルタ自体が他の結合によって拡張されている場合は、それらの結合も削除されます。