sp_mergearticlecolumn (Transact-SQL)

マージ パブリケーションを列方向にパーティション分割します。このストアド プロシージャは、パブリッシャ側でパブリケーション データベースについて実行されます。

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

構文

sp_mergearticlecolumn [ @publication = ] 'publication'
        , [ @article = ] 'article'
    [ , [ @column = ] 'column'
    [ , [ @operation = ] 'operation' 
    [ , [ @schema_replication = ] 'schema_replication' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ] 
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ] 

引数

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

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

  • [ @column=] 'column'
    列方向にパーティション分割する列の名前を指定します。column のデータ型は sysname で、既定値は NULL です。値が NULL で @operation = N'add' の場合、既定ではソース テーブルのすべての列がアーティクルに追加されます。operation が drop に設定されている場合、column に NULL 値は許容されません。アーティクルから列を除外するには、sp_mergearticlecolumn を実行し、対象となる article から削除する各列の column と @operation = N'drop' を指定します。

  • [ @operation=] 'operation'
    レプリケーションの状態を指定します。operation のデータ型は nvarchar(4) で、既定値は ADD です。add の場合、レプリケーションする列にマークが付きます。drop の場合、列のマークがはずされます。

  • [ @schema_replication=] 'schema_replication'
    マージ エージェントが実行されたときにスキーマの変更を通知します。schema_replication のデータ型は nvarchar(5) で、既定値は FALSE です。

    注意

    schema_replication では FALSE だけがサポートされます。

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    スナップショットを無効にする機能を有効または無効にします。force_invalidate_snapshot のデータ型は bit で、既定値は 0 です。

    0 に設定すると、マージ アーティクルへの変更によってスナップショットが無効になることはありません。

    1 に設定すると、マージ アーティクルへの変更によってスナップショットが無効になることがあります。この場合、値 1 では新しいスナップショットを作成する権限が与えられます。

  • [ **@force_reinit_subscription = ]**force_reinit_subscription
    サブスクリプションを再初期化する機能を有効または無効にします。force_reinit_subscription のデータ型は bit で、既定値は 0 です。

    0 に設定すると、マージ アーティクルへの変更によってサブスクリプションが再初期化されることはありません。

    1 に設定すると、マージ アーティクルへの変更によってサブスクリプションが再初期化されることがあります。この場合、値 1 ではサブスクリプションを再初期化する権限が与えられます。

戻り値

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

説明

sp_mergearticlecolumn は、マージ レプリケーションで使用します。

自動 ID 範囲管理が使用されている場合、アーティクルから ID 列を削除することはできません。詳細については、「ID 列のレプリケート」を参照してください。

最初のスナップショットが作成された後、アプリケーションで新しく列方向のパーティションを設定する場合は、新しいスナップショットを作成して各サブスクリプションに再適用する必要があります。スナップショットは、次回スケジュールされているスナップショット エージェントおよびディストリビューション エージェント、またはマージ エージェントが実行されるときに適用されます。

競合の検出で行の追跡を使用する場合 (既定)、ベース テーブルには最大 1,024 列を含めることができます。ただし、最大で 246 列がパブリッシュされるように、列をアーティクルからフィルタ処理する必要があります。列の追跡を使用する場合、ベース テーブルには最大 246 列を含めることができます。詳細については、「マージ レプリケーションで競合を検出および解決する方法」の「追跡レベル」を参照してください。

使用例

DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @table3 AS sysname;
DECLARE @salesschema AS sysname;
DECLARE @hrschema AS sysname;
DECLARE @filterclause AS nvarchar(1000);
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @table1 = N'Employee'; 
SET @table2 = N'SalesOrderHeader'; 
SET @table3 = N'SalesOrderDetail'; 
SET @salesschema = N'Sales';
SET @hrschema = N'HumanResources';
SET @filterclause = N'Employee.LoginID = HOST_NAME()';

-- Add a filtered article for the Employee table.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_object = @table1, 
  @type = N'table', 
  @source_owner = @hrschema,
  @schema_option = 0x0004CF1,
  @description = N'article for the Employee table',
  @subset_filterclause = @filterclause;

-- Add an article for the SalesOrderHeader table that is filtered
-- based on Employee and horizontally filtered.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_object = @table2, 
  @type = N'table', 
  @source_owner = @salesschema, 
  @vertical_partition = N'true',
  @schema_option = 0x0034EF1,
  @description = N'article for the SalesOrderDetail table';

-- Add an article for the SalesOrderDetail table that is filtered
-- based on SaledOrderHeader.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table3, 
  @source_object = @table3, 
  @source_owner = @salesschema,
  @description = 'article for the SalesOrderHeader table', 
  @identityrangemanagementoption = N'auto', 
  @pub_identity_range = 100000, 
  @identity_range = 100, 
  @threshold = 80,
  @schema_option = 0x0004EF1;

-- Add all columns to the SalesOrderHeader article.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Remove the credit card Approval Code column.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @column = N'CreditCardApprovalCode', 
  @operation = N'drop', 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between Employee and SalesOrderHeader.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table2, 
  @filtername = N'SalesOrderHeader_Employee', 
  @join_articlename = @table1, 
  @join_filterclause = N'Employee.BusinessEntityID = SalesOrderHeader.SalesPersonID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between SalesOrderHeader and SalesOrderDetail.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table3, 
  @filtername = N'SalesOrderDetail_SalesOrderHeader', 
  @join_articlename = @table2, 
  @join_filterclause = N'SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;
GO

権限

sp_mergearticlecolumn を実行できるのは、sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバだけです。