sp_articlefilter (Transact-SQL)
パブリッシュされたデータをテーブル アーティクルに基づいてフィルター選択します。 このストアド プロシージャは、パブリッシャー側でパブリケーション データベースについて実行されます。
構文
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 のデータ型は bit で、既定値は 0 です。0 に設定すると、アーティクルへの変更によってスナップショットが無効になることはありません。 変更に新しいスナップショットが必要であることをストアド プロシージャが検出すると、エラーが発生し、変更は行われません。
1 に設定すると、アーティクルの変更によってスナップショットが無効になることがあります。また、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットに古いスナップショットのマークを付けて、新しいスナップショットを生成することができます。
[ @force_reinit_subscription = ] force_reinit_subscription
このストアド プロシージャが実行する操作によって、既存のサブスクリプションの再初期化が必要になることを許可します。 force_reinit_subscription のデータ型は bit で、既定値は 0 です。0 に設定すると、アーティクルを変更してもサブスクリプションを再初期化する必要はありません。 変更にサブスクリプションの再初期化が必要であることをストアド プロシージャが検出すると、エラーが発生し、変更は加えられません。
1 は、アーティクルの変更によって既存のサブスクリプションが再初期化されることを示し、サブスクリプションの再初期化を許可します。
[ @publisher= ] 'publisher'
Microsoft SQL Server 以外のパブリッシャーを指定します。 publisher のデータ型は sysname で、既定値は NULL です。注 SQL Server パブリッシャーに publisher を使用しないでください。
戻り値
成功した場合は 0 を、失敗した場合は 1 をそれぞれ返します。
説明
sp_articlefilter は、スナップショット レプリケーションおよびトランザクション レプリケーションで使用します。
既存のサブスクリプションでアーティクルに対して sp_articlefilter を実行するには、サブスクリプションを再初期化する必要があります。
sp_articlefilter はフィルターを作成して、フィルター ストアド プロシージャの ID を sysarticles (Transact-SQL) テーブルの filter 列に挿入し、制限句のテキストを filter_clause 列に挿入します。
行フィルターにより選択したアーティクルを作成するには、まず filter パラメーターなしで sp_addarticle (Transact-SQL) を実行します。 次に、filter_clause を含むすべてのパラメーターを指定して sp_articlefilter を実行し、さらにこれと同じ filter_clause を含むすべてのパラメーターを指定して sp_articleview (Transact-SQL) を実行します。 このフィルターが既に存在していて、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
権限
sp_articlefilter を実行できるのは、固定サーバー ロール sysadmin または固定データベース ロール db_owner のメンバーだけです。
関連項目
参照
sp_changearticle (Transact-SQL)
レプリケーション ストアド プロシージャ (Transact-SQL)