sp_mergearticlecolumn (Transact-SQL)
Gilt für: SQL Server
Führt eine vertikale Partitionierung einer Mergeveröffentlichung durch. Diese gespeicherte Prozedur wird im Publisher in der Publikationsdatenbank ausgeführt.
Transact-SQL-Syntaxkonventionen
Syntax
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 ]
[ ; ]
Argumente
[ @publication = ] N'Publikation'
Der Name der Veröffentlichung. @publication ist "sysname" ohne Standard.
[ @article = ] N'article'
Der Name des Artikels in der Publikation. @article ist "sysname" ohne Standard.
[ @column = ] N'column'
Identifiziert die Spalten, für die die vertikale Partition erstellt werden soll. @column ist "sysname" mit einem Standardwert von NULL
. Wenn NULL
und @operation auf festgelegt add
ist, werden standardmäßig alle Spalten in der Quelltabelle dem Artikel hinzugefügt. @column kann nicht seinNULL
, wenn @operation auf .drop
Um Spalten aus einem Artikel auszuschließen, führen sp_mergearticlecolumn
Sie @column aus, und legen Sie diese drop
@operation
fest, damit jede Spalte aus dem angegebenen @article entfernt werden soll.
[ @operation = ] N'operation'
Der Replikationsstatus. @operation ist nvarchar(4), mit einem Standardwert von add
.
add
markiert die Spalte für die Replikation.drop
löscht die Spalte.
[ @schema_replication = ] N'schema_replication'
Gibt an, dass eine Schemaänderung weitergegeben wird, wenn die Merge-Agent ausgeführt wird. @schema_replication ist nvarchar(5), mit einem Standardwert von false
.
Wird nur false
für @schema_replication unterstützt.
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
Aktiviert oder deaktiviert die Möglichkeit, eine Momentaufnahme für ungültig zu erklären. @force_invalidate_snapshot ist bit, mit einem Standardwert von 0
.
0
Gibt an, dass Änderungen am Seriendruckartikel nicht dazu führen, dass die Momentaufnahme ungültig ist.1
Gibt an, dass Änderungen am Seriendruckartikel dazu führen können, dass die Momentaufnahme ungültig ist, und wenn dies der Fall ist, erhält ein Wert der1
Berechtigung für die neue Momentaufnahme.
[ @force_reinit_subscription = ] force_reinit_subscription
Aktiviert oder deaktiviert die Möglichkeit, das Abonnement erneut initialisiert zu haben. @force_reinit_subscription ist bit, mit einem Standardwert von 0
.
0
Gibt an, dass Änderungen am Seriendruckartikel nicht dazu führen, dass das Abonnement erneut initialisiert wird.1
Gibt an, dass Änderungen am Seriendruckartikel dazu führen können, dass das Abonnement erneut initialisiert wird, und wenn dies der Fall ist, erhält ein Wert der1
Berechtigung für die Erneute Initialisierung des Abonnements.
Rückgabecodewerte
0
(erfolgreich) oder 1
Fehler.
Hinweise
sp_mergearticlecolumn
wird in der Seriendruckreplikation 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 die Anfangsmomentaufnahme erstellt wurde, muss eine neue Momentaufnahme generiert und auf jedes Abonnement erneut angewendet werden. Momentaufnahmen werden angewendet, wenn die nächste geplante Momentaufnahme 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. Wenn Spaltennachverfolgung verwendet wird, kann die Basistabelle maximal 246 Spalten enthalten.
Beispiele
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 db_owner feste Datenbankrolle können ausgeführt werden sp_mergearticlecolumn
.