sp_articleview (Transact-SQL)

テーブルが列または行でフィルタ選択されている場合に、パブリッシュされたアーティクルを定義するビューを作成します。このビューは、出力先のテーブル用にフィルタ選択されたスキーマやデータのソースとして使用されます。このストアド プロシージャでは、サブスクライブされていないアーティクルだけを変更できます。このストアド プロシージャは、パブリッシャ側でパブリケーション データベースについて実行されます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sp_articleview [ @publication = ] 'publication'
        , [ @article = ] 'article'
    [ , [ @view_name = ] 'view_name']
    [ , [ @filter_clause = ] 'filter_clause']
    [ , [ @change_active = ] change_active ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] 'publisher' ]
    [ , [ @refreshsynctranprocs = ] refreshsynctranprocs ]
    [ , [ @internal = ] internal ]

引数

  • [ @publication=] 'publication'
    このアーティクルを含むパブリケーションの名前を指定します。publication のデータ型は sysname で、既定値はありません。

  • [ @article=] 'article'
    アーティクルの名前を指定します。article のデータ型は sysname で、既定値はありません。

  • [ @view_name=] 'view_name'
    パブリッシュされたアーティクルを定義するビューの名前を指定します。view_name のデータ型は nvarchar(386) で、既定値は NULL です。

  • [ @filter_clause=] 'filter_clause'
    行フィルタを定義する制限句 (WHERE) を指定します。制限句を入力する場合は、WHERE キーワードを省略します。filter_clause のデータ型は ntext で、既定値は NULL です。

  • [ @change_active = ] change_active
    サブスクリプションを持つパブリケーションの列の変更を許可します。change_active のデータ型は int で、既定値は 0 です。0 の場合、列は変更されません。1 の場合、サブスクリプションを持つアクティブなアーティクルに対してビューを作成または再作成できます。

  • [ @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 は使用しないでください。

  • [ @refreshsynctranprocs = ] refreshsynctranprocs
    レプリケーションの同期に使用するストアド プロシージャを自動的に再作成するかどうかを指定します。refreshsynctranprocs のデータ型は bit で、既定値は 1 です。

    1 を指定すると、ストアド プロシージャは再作成されます。

    0 を指定すると、ストアド プロシージャは再作成されません。

  • [ @internal= ] internal
    単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

戻り値

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

説明

sp_articleview では、パブリッシュされたアーティクルを定義するビューを作成して、このビューの ID を sysarticles (Transact-SQL) テーブルの sync_objid 列に挿入し、filter_clause 列に制限句のテキストを挿入します。すべての列をレプリケートする場合に filter_clause を指定しないと、sysarticles (Transact-SQL) テーブルの sync_objid はベース テーブルの ID に設定され、sp_articleview を使用する必要はなくなります。

列方向にフィルタ選択されたテーブルをパブリッシュする (列をフィルタ選択する) には、まず sync_object パラメータを指定せずに sp_addarticle を実行し、次にレプリケートする列ごとに 1 回ずつ sp_articlecolumn (Transact-SQL) を実行 (列フィルタを定義) してから sp_articleview をもう一度実行して、パブリッシュされたアーティクルを定義するビューを作成します。

行方向にフィルタ選択されたテーブルをパブリッシュする (行をフィルタ選択する) には、まず filter パラメータを指定せずに sp_addarticle (Transact-SQL) を実行し、次に、filter_clause を含むすべてのパラメータを指定して sp_articlefilter (Transact-SQL) を実行してから、同じ filter_clause を含むすべてのパラメータを指定して sp_articleview をもう一度実行します。

列方向および行方向に選択されたテーブルをパブリッシュするには、sync_object パラメータや filter パラメータを指定せずに sp_addarticle (Transact-SQL) を実行し、レプリケートする列ごとに 1 回 sp_articlecolumn (Transact-SQL) を実行した後、sp_articlefilter (Transact-SQL)sp_articleview を実行します。

パブリッシュされたアーティクルを定義するビューが既にアーティクルに含まれている場合、sp_articleview を実行すると既存のビューが削除され、新しいビューが自動的に作成されます。ビューを手動で作成した場合 (sysarticles (Transact-SQL)type5 の場合)、既存のビューは削除されません。

カスタム フィルタ ストアド プロシージャを作成し、パブリッシュされたアーティクルを定義するビューを手動で作成した場合は、sp_articleview を実行しないでください。代わりに sp_addarticle (Transact-SQL)filter および sync_object パラメータを、適切な type 値と共に使用してください。

使用例

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_articleview を実行できるのは、sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバだけです。