sp_mergearticlecolumn (Transact-SQL)

Führt eine vertikale Partitionierung einer Mergeveröffentlichung durch. Diese gespeicherte Prozedur wird auf dem Verleger für die Veröffentlichungsdatenbank ausgeführt.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

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 ] 

Argumente

  • [ @publication = ] 'publication'
    Der Name der Veröffentlichung. Publication ist vom Datentyp sysname und hat keinen Standardwert.

  • [ @article = ] 'article'
    Der Name des Artikels in der Veröffentlichung. article ist vom Datentyp sysname und hat keinen Standardwert.

  • [ @column = ] 'column'
    Identifiziert die Spalten, für die die vertikale Partition erstellt werden soll. column ist vom Datentyp sysname und hat den Standardwert NULL. Bei NULL und @operation = N'add' werden alle Spalten der Quelltabelle standardmäßig dem Artikel hinzugefügt. column kann nicht NULL sein, wenn operation auf drop festgelegt ist. Zum Ausschließen von Spalten aus dem Artikel führen Sie sp_mergearticlecolumn aus, und geben Sie für jede aus dem angegebenen article zu entfernende Spalte column und @operation = N'drop' an.

  • [ @operation = ] 'operation'
    Der Replikationsstatus. operation ist vom Datentyp nvarchar(4) und hat den Standardwert ADD. add markiert die Spalte für die Replikation. drop hebt die Markierung der Spalte auf.

  • [ @schema_replication = ] 'schema_replication'
    Gibt an, dass eine Schemaänderung weitergegeben wird, wenn der Merge-Agent ausgeführt wird. schema_replication ist vom Datentyp nvarchar(5) und hat den Standardwert FALSE.

    HinweisHinweis

    Nur FALSE wird für schema_replication unterstützt.

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    Aktiviert oder deaktiviert die Möglichkeit, einen Snapshot für ungültig zu erklären. force_invalidate_snapshot ist vom Datentyp bit; der Standardwert ist 0.

    Der Wert 0 gibt an, dass Änderungen am Mergeartikel nicht die Ungültigkeit des Snapshots bewirken.

    Der Wert 1 gibt an, dass Änderungen am Mergeartikel die Ungültigkeit des Snapshots bewirken können. Wenn dies zutrifft, wird mit dem Wert 1 die Berechtigung für das Auftreten des neuen Snapshots erteilt.

  • [ **@force_reinit_subscription = ]**force_reinit_subscription
    Aktiviert oder deaktiviert die Möglichkeit, ein Abonnement erneut zu initialisieren. force_reinit_subscription ist vom Datentyp bit und hat den Standardwert 0.

    Der Wert 0 gibt an, dass Änderungen am Mergeartikel nicht die erneute Initialisierung des Abonnements bewirken.

    Der Wert 1 gibt an, dass Änderungen am Mergeartikel die erneute Initialisierung des Abonnements bewirken können. Wenn dies zutrifft, wird mit dem Wert 1 die Berechtigung für das erneute Initialisieren des Abonnements erteilt.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Hinweise

sp_mergearticlecolumn wird bei der Mergereplikation verwendet.

Eine Identitätsspalte kann nicht aus dem Artikel gelöscht werden, wenn die automatische Identitätsbereichsverwaltung verwendet wird. Weitere Informationen finden Sie unter Replizieren von Identitätsspalten.

Wenn eine Anwendung eine neue vertikale Partition festlegt, nachdem der Anfangssnapshot erstellt wurde, muss ein neuer Snapshot generiert und auf jedes Abonnement erneut angewendet werden. Snapshots werden angewendet, wenn der nächste geplante Snapshot und der Verteilungs- oder Merge-Agent ausgeführt werden.

Falls die Zeilennachverfolgung zur Konflikterkennung verwendet wird (Standardeinstellung), kann die Basistabelle maximal 1.024 Spalten enthalten. Die Spalten müssen jedoch im Artikel gefiltert werden, sodass maximal 246 Spalten veröffentlicht werden. Falls die Spaltennachverfolgung verwendet wird, kann die Basistabelle maximal 246 Spalten enthalten. Weitere Informationen finden Sie im Abschnitt zur Nachverfolgungsebene unter Konflikterkennung und -lösung bei der Mergereplikation.

Beispiel

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

Berechtigungen

Nur Mitglieder der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner können sp_mergearticlecolumn ausführen.