sp_articlefilter (Transact-SQL)
適用対象: SQL Server
Azure SQL Managed Instance
テーブルアーティクルに基づいてパブリッシュされたデータをフィルター処理します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。
構文
sp_articlefilter [ @publication = ] 'publication'
, [ @article = ] 'article'
[ , [ @filter_name = ] 'filter_name' ]
[ , [ @filter_clause = ] 'filter_clause' ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ , [ @publisher = ] 'publisher' ]
引数
[ @publication = ] 'publication'
アーティクルを含むパブリケーションの名前を指定します。 publication は sysname で、既定値はありません。
[ @article = ] 'article'
アーティクルの名前を指定します。 article は sysname で、既定値はありません。
[ @filter_name = ] 'filter_name'
filter_nameから作成するフィルター ストアド プロシージャの名前です。 filter_name は nvarchar(386)で、既定値は NULL です。 アーティクル フィルターには一意の名前を指定する必要があります。
[ @filter_clause = ] 'filter_clause'
水平フィルターを定義する制限 (WHERE) 句です。 制限句を入力するときは、キーワード WHERE を省略します。 filter_clause は ntext で、既定値は NULL です。
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
このストアド プロシージャによって実行されたアクションによって、既存のスナップショットが無効になる可能性があることを確認します。 force_invalidate_snapshot は ビットで、既定値は 0 です。
0 は、アーティクルに対する変更によってスナップショットが無効になることがないように指定します。 ストアド プロシージャで、変更に新しいスナップショットが必要であると検出された場合は、エラーが発生し、変更は行われません。
1 は、アーティクルに対する変更によってスナップショットが無効になる可能性があることを指定し、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットを古いスナップショットとしてマークし、新しいスナップショットを生成するためのアクセス許可を付与します。
[ @force_reinit_subscription = ] force_reinit_subscription
このストアド プロシージャによって実行されるアクションでは、既存のサブスクリプションを再初期化する必要がある可能性があることを確認します。 force_reinit_subscription は ビットで、既定値は 0 です。
0 は、アーティクルを変更しても、サブスクリプションを再初期化する必要が生じないことを指定します。 ストアド プロシージャで、変更によってサブスクリプションの再初期化が必要であることが検出されると、エラーが発生し、変更は行われません。
1 は、アーティクルに対する変更によって既存のサブスクリプションが再初期化されることを指定し、サブスクリプションの再初期化を実行するためのアクセス許可を付与します。
[ @publisher = ] 'publisher'
Microsoft SQL Server 以外のパブリッシャーを指定します。 publisher は sysname で、既定値は NULL です。
Note
publisher は、SQL Serverパブリッシャーで使用しないでください。
リターン コードの値
0 (成功) または 1 (失敗)
解説
sp_articlefilter は、スナップショット レプリケーションとトランザクション レプリケーションで使用されます。
既存のサブスクリプションを含むアーティクルの sp_articlefilter を実行するには、それらのサブスクリプションを再初期化する必要があります。
sp_articlefilterフィルターを作成し、sysarticles (Transact-SQL) テーブルのフィルター列にフィルター ストアド プロシージャの ID を挿入し、filter_clause列に制限句のテキストを挿入します。
水平フィルターを使用してアーティクルを作成するには、フィルター パラメーターなしで sp_addarticle (Transact-SQL) を実行します。 sp_articlefilterを実行し、filter_clauseを含むすべてのパラメーターを指定し、sp_articleview (Transact-SQL) を実行して、同じfilter_clauseを含むすべてのパラメーターを指定します。 フィルターが既に存在し、sysarticles の型が 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実行できます。
参照
アーティクルの定義
静的行フィルターの定義および変更
sp_addarticle (Transact-SQL)
sp_articleview (Transact-SQL)
sp_changearticle (Transact-SQL)
sp_droparticle (Transact-SQL)
sp_helparticle (Transact-SQL)
レプリケーション ストアド プロシージャ (Transact-SQL)
フィードバック
フィードバックの送信と表示