sp_articlefilter (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
テーブルアーティクルに基づいてパブリッシュされるデータをフィルター処理します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。
構文
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
) 句。 制限句を入力するときは、キーワード WHERE
を省略します。 @filter_clause は nvarchar(max) で、既定値は NULL
です。
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
このストアド プロシージャによって実行されたアクションによって、既存のスナップショットが無効になる可能性があることを確認します。 @force_invalidate_snapshot は ビットで、既定値は 0
です。
0
は、アーティクルに対する変更によってスナップショットが無効になることがないように指定します。 ストアド プロシージャが変更に新しいスナップショットが必要であることを検出した場合、エラーが発生し、変更は行われません。1
は、アーティクルに対する変更によってスナップショットが無効になる可能性があることを指定します。また、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットを古いスナップショットとしてマークし、新しいスナップショットを生成するためのアクセス許可を付与します。
[ @force_reinit_subscription = ] force_reinit_subscription
このストアド プロシージャによって実行されるアクションで、既存のサブスクリプションの再初期化が必要になる可能性があることを確認します。 @force_reinit_subscription は bit で、既定値は 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) を実行します。 sp_articlefilter
を実行し、@filter_clauseを含むすべてのパラメーターを指定してから、sp_articleview (Transact-SQL) を実行し、同じ@filter_clauseを含むすべてのパラメーターを指定します。 フィルターが既に存在し、sysarticles
内のtype
が1
場合 (ログ ベースの記事)、前のフィルターが削除され、新しいフィルターが作成されます。
@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
を実行できます。