次の方法で共有


フィルタの追加または編集

[フィルタの追加] ダイアログ ボックスと [フィルタの編集] ダイアログ ボックスを使用すると、静的行フィルタおよびパラメータ化された行フィルタを追加したり編集したりできます。

注意

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

すべての種類のパブリケーションに静的フィルタを含めることができ、マージ パブリケーションにはパラメータ化されたフィルタも含めることができます。静的フィルタは、パブリケーションが作成されたときに評価されます。パブリケーションに対するすべてのサブスクライバは、同じデータを受け取ります。パラメータ化されたフィルタは、レプリケーションの同期中に評価されます。サブスクライバごとのログインまたはコンピュータ名に基づいて、異なるサブスクライバが異なるデータのパーティションを受け取ることができます。ダイアログ ボックスの [サンプル ステートメント] リンクをクリックして、フィルタの種類ごとのサンプルを参照します。フィルタ オプションの詳細については、「パブリッシュされたデータのフィルター選択」を参照してください。

行フィルタを使用すれば、テーブルからパブリッシュの対象となる行のサブセットを指定できます。行フィルタを使用して、ユーザーにとって必要のない行 (機密性の高い情報など) を削除したり、さまざまなサブスクライバに送られるさまざまなデータのパーティションを作成したりできます。さまざまなデータのパーティションをさまざまなサブスクライバにパブリッシュすると、複数のサブスクライバが同じデータを更新することによって発生する可能性のある競合を回避するためにも役立ちます。

オプション

このダイアログ ボックスには、トランザクション パブリケーションとスナップショット アプリケーション用の 2 段階のプロセスと、マージ パブリケーション用の 3 段階のプロセスがあります。すべての種類のパブリケーションで、フィルタ対象のテーブルと、フィルタに含む 1 つまたは複数の列を選択する必要があります。フィルタは、標準の WHERE 句として定義されます。

  1. [フィルタを適用するテーブルを選択します。]

    既存のフィルタを編集している場合は、テーブルの選択は変更できません。新しいフィルタを追加している場合は、ドロップダウン リスト ボックスから、テーブルを選択します。テーブルは、[アーティクル] ページでテーブルが選択されていて、まだ行フィルタを持たない場合にのみ、リスト ボックスに表示されます。テーブルに行フィルタがあり、新しいフィルタを定義する場合は、次の手順に従います。

    1. [フィルタの追加] ダイアログ ボックスで [キャンセル] をクリックします。

    2. [テーブル行のフィルタ選択] ページのフィルタ ペインでテーブルを選択し、[編集] をクリックします。

    3. [フィルタの編集] ダイアログ ボックスの既存のフィルタを編集します。

  2. [フィルタ ステートメントを完成させ、サブスクライバが受け取るテーブル行を指定します。]

    新しいフィルタ ステートメントを定義するか、既存のステートメントを編集します。[列] リスト ボックスには、[フィルタを適用するテーブルを選択します。] で選択したテーブルからパブリッシュするすべての列が一覧表示されます。[フィルタ ステートメント] テキスト領域には、次の形式の既存のテキストが表示されます。

    SELECT <published_columns> FROM [schema].[tablename] WHERE

    このテキストは変更できません。標準の Transact-SQL 構文を使用して、WHERE キーワードの後にフィルタ句を入力します。パブリッシャが Oracle パブリッシャの場合は、WHERE 句は Oracle クエリ構文に準拠する必要があります。可能であれば、複雑なフィルタの使用は避けます。静的フィルタとパラメータ化されたフィルタは、両方ともパブリケーションの処理時間を増加させます。したがって、フィルタ ステートメントは可能な限り簡潔にしてください。

    重要な注意事項重要

    パフォーマンスの理由により、マージ パブリケーションの場合は、パラメータ化された行フィルタ句の列名に、LEFT([MyColumn]) = SUSER_SNAME() などの関数を適用しないことをお勧めします。フィルタ句で HOST_NAME を使用していて、HOST_NAME 値を上書きする場合は、CONVERT を使用するデータ型の変換が必要になる可能性があります。このようなケースに対する推奨事項の詳細については、「パラメーター化された行フィルター」トピックの「HOST_NAME() 値の上書き」を参照してください。

  3. [このテーブルからデータを取得するサブスクリプションの数を指定します。]

    Microsoft SQL Server 2005 以降のバージョンのみで、マージ レプリケーションのみです。マージ レプリケーションを使用して、お使いのデータとアプリケーションに最適なパーティションの種類を指定できます。[このテーブルの 1 行を 1 つのサブスクリプションのみに移動する] を選択すると、マージ レプリケーションでは、重複しないパーティションのオプションが設定されます。重複しないパーティションを事前計算済みパーティションと共に使用することで、パフォーマンスが向上します。事前計算済みパーティションに関連するアップロードの負担が、重複しないパーティションによって最小限に抑えられるためです。重複しないパーティションのパフォーマンス上の利点は、使用するパラメータ化されたフィルタと結合フィルタが複雑になるほど明確になります。このオプションを選択する場合は、データのパーティション分割によって、1 つの行が複数のサブスクライバにレプリケートされないことを確認する必要があります。詳細については、「パラメーター化された行フィルター」トピックの「[パーティションのオプション] の設定」を参照してください。

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