sp_articlefilter (Transact-SQL)

適用対象: SQL ServerAzure SQL Managed Instance

テーブルアーティクルに基づいてパブリッシュされるデータをフィルター処理します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。

Transact-SQL 構文表記規則

構文

sp_articlefilter
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @filter_name = ] N'filter_name' ]
    [ , [ @filter_clause = ] N'filter_clause' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] N'publisher' ]
[ ; ]

引数

[ @publication = ] N'publication'

アーティクルを含むパブリケーションの名前。 @publicationは sysname で、既定値はありません。

[ @article = ] N'article'

アーティクルの名前。 @articleは sysname で、既定値はありません。

[ @filter_name = ] N'filter_name'

@filter_nameから作成するフィルター ストアド プロシージャの名前。 @filter_nameは nvarchar(517) で、既定値は NULL. アーティクル フィルターには一意の名前を指定する必要があります。

[ @filter_clause = ] N'filter_clause'

水平フィルターを定義する制限 (WHERE) 句。 制限句を入力するときは、キーワード (keyword)を省略しますWHERE@filter_clauseは nvarchar(max) で、既定値は NULL.

[ @force_invalidate_snapshot = ] force_invalidate_スナップショット

このストアド プロシージャによって実行されたアクションによって、既存のスナップショットが無効になる可能性があることを確認します。 @force_invalidate_スナップショットはビットで、既定値は 0.

  • 0は、アーティクルに対する変更によってスナップショットが無効になることがないように指定します。 変更に新しいスナップショットが必要であるとストアド プロシージャで検出された場合、エラーが発生し、変更は行われません。
  • 1は、アーティクルの変更によってスナップショットが無効になる可能性があることを指定します。また、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットが古いとしてマークされ、新しいスナップショットが生成されるアクセス許可を付与します。

[ @force_reinit_subscription = ] force_reinit_subscription

このストアド プロシージャによって実行されるアクションで、既存のサブスクリプションの再初期化が必要になる可能性があることを確認します。 @force_reinit_subscriptionはビットで、既定値は 0.

  • 0 は、アーティクルを変更してもサブスクリプションを再初期化する必要がないように指定します。 変更によってサブスクリプションの再初期化が必要であることがストアド プロシージャによって検出された場合、エラーが発生し、変更は行われません。
  • 1 は、アーティクルに変更を加えて既存のサブスクリプションを再初期化し、サブスクリプションの再初期化を実行するためのアクセス許可を付与することを指定します。

[ @publisher = ] N'publisher'

SQL Server 以外のパブリッシャーを指定します。 @publisherは sysname で、既定値は NULL.

@publisher SQL Server パブリッシャーでは使用しないでください。

リターン コードの値

0 (成功) または 1 (失敗)。

解説

sp_articlefilterは、スナップショット レプリケーションとトランザクション レプリケーションで使用されます。

既存の sp_articlefilter サブスクリプションを持つアーティクルを実行するには、それらのサブスクリプションを再初期化する必要があります。

sp_articlefilterはフィルターを作成し、sysarticles (Transact-SQL) テーブルの列にfilterフィルター ストアド プロシージャの ID を挿入し、列に制限句のテキストをfilter_clause挿入します。

水平フィルターを使用してアーティクルを作成するには、@filter_name パラメーターなしで sp_addarticle (Transact-SQL) を実行します。 Execute を実行sp_articlefilterし、@filter_clauseを含むすべてのパラメーターを指定し、sp_articleview (Transact-SQL) を実行して、同じ@filter_clauseを含むすべてのパラメーターを指定します。 フィルターが既に存在し、in が 1 (ログ ベースのtypesysarticlesアーティクル) の場合は、前のフィルターが削除され、新しいフィルターが作成されます。

@filter_nameと@filter_clauseが指定されていない場合は、前のフィルターが削除され、フィルター ID が 0.

DECLARE @publication    AS sysname;
DECLARE @table AS sysname;
DECLARE @filterclause AS nvarchar(500);
DECLARE @filtername AS nvarchar(386);
DECLARE @schemaowner AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @table = N'Product';
SET @filterclause = N'[DiscontinuedDate] IS NULL'; 
SET @filtername = N'filter_out_discontinued';
SET @schemaowner = N'Production';

-- Add a horizontally and vertically filtered article for the Product table.
-- Manually set @schema_option to ensure that the Production schema 
-- is generated at the Subscriber (0x8000000).
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @table, 
    @source_object = @table,
    @source_owner = @schemaowner, 
    @schema_option = 0x80030F3,
    @vertical_partition = N'true', 
    @type = N'logbased',
    @filter_clause = @filterclause;

-- (Optional) Manually call the stored procedure to create the 
-- horizontal filtering stored procedure. Since the type is 
-- 'logbased', this stored procedures is executed automatically.
EXEC sp_articlefilter 
    @publication = @publication, 
    @article = @table, 
    @filter_clause = @filterclause, 
    @filter_name = @filtername;

-- Add all columns to the article.
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table;

-- Remove the DaysToManufacture column from the article
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table, 
    @column = N'DaysToManufacture', 
    @operation = N'drop';

-- (Optional) Manually call the stored procedure to create the 
-- vertical filtering view. Since the type is 'logbased', 
-- this stored procedures is executed automatically.
EXEC sp_articleview 
    @publication = @publication, 
    @article = @table,
    @filter_clause = @filterclause;
GO

アクセス許可

sysadmin 固定サーバー ロールまたは固定データベース ロールdb_ownerメンバーのみが実行sp_articlefilterできます。