sys.sp_mergearticlecolumn (Transact-SQL)

Gäller för:SQL Server

Delar upp en sammanslagningspublikation vertikalt. Den här lagrade proceduren körs i Publisher i publikationsdatabasen.

Transact-SQL syntaxkonventioner

Syntax

sys.sp_mergearticlecolumn
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @column = ] N'column' ]
    [ , [ @operation = ] N'operation' ]
    [ , [ @schema_replication = ] N'schema_replication' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]

Arguments

[ @publication = ] N'publicering'

Namnet på publikationen. @publication är sysname, utan standard.

[ @article = ] Inte en artikel'

Namnet på artikeln i publikationen. @article är sysname, utan standard.

[ @column = ] N'column'

Identifierar kolumnerna där den vertikala partitionen ska skapas. @column är sysname, med standardvärdet .NULL Om NULL och @operation är inställd till add, läggs alla kolumner i källtabellen till artikeln som standard. @column kan inte vara det NULL när @operation är inställd på drop. För att utesluta kolumner från en artikel, kör sp_mergearticlecolumn och specificera @column, och ställ @operation in för varje drop kolumn som ska tas bort från den angivna @article.

[ @operation = ] N'operation'

Replikeringsstatusen. @operation är nvarchar(4), med en standard på add.

  • add markerar kolumnen för replikation.
  • drop rensar kolumnen.

[ @schema_replication = ] N'schema_replication'

Specificerar att en schemaändring sprids när Merge Agent körs. @schema_replication är nvarchar(5), med en standard på false.

Endast false stöds för @schema_replication.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Aktiverar eller inaktiverar möjligheten att få en ögonblicksbild ogiltig. @force_invalidate_snapshot är bit, med standardvärdet 0.

  • 0 specificerar att ändringar i sammanslagningsartikeln inte gör att snapshoten blir ogiltig.

  • 1 specificerar att ändringar i sammanslagningsartikeln kan göra att ögonblicksbilden blir ogiltig, och om så är fallet ger ett värde på 1 tillåtelse för att den nya ögonblicksbilden ska kunna uppträda.

[ @force_reinit_subscription = ] force_reinit_subscription

Aktiverar eller inaktiverar möjligheten att få prenumerationen initierad på nytt. @force_reinit_subscription är lite, med standardvärdet 0.

  • 0 specificerar att ändringar i sammanslagningsartikeln inte gör att prenumerationen återinitieras.

  • 1 specificerar att ändringar i sammanslagningsartikeln kan orsaka att prenumerationen reinitialiseras, och om så är fallet ger ett värde på 1 tillåtelse för prenumerationsominitialisering.

Returnera kodvärden

0 (lyckades) eller 1 (fel).

Remarks

sp_mergearticlecolumn används vid sammanslagningsreplikation.

En identitetskolumn kan inte tas bort från artikeln om automatisk identitetsområdeshantering används. Mer information finns i Replikera identitetskolumner.

Om en applikation sätter en ny vertikal partition efter att den initiala snapshoten skapats måste en ny snapshot genereras och appliceras på nytt på varje prenumeration. Snapshots appliceras när nästa schemalagda snapshot och distribution eller merge agent körs.

Om radspårning används för konfliktdetektering (standard) kan bastabellen innehålla maximalt 1 024 kolumner, men kolumner måste filtreras från artikeln så att maximalt 246 kolumner publiceras. Om kolumnspårning används kan bastabellen innehålla högst 246 kolumner.

Examples

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

Permissions

Endast medlemmar av sysadmin-fasta serverrollen eller db_owner fasta databasrollen kan köra sp_mergearticlecolumn.