sp_addmergefilter (Transact-SQL)sp_addmergefilter (Transact-SQL)

GILT FÜR: jaSQL Server jaAzure SQL-Datenbank (nur verwaltete Instanz) neinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

Fügt einen neuen Mergefilter hinzu, um eine Partition auf der Basis eines Joins mit einer anderen Tabelle zu erstellen.Adds a new merge filter to create a partition based on a join with another table. Diese gespeicherte Prozedur wird auf dem Verleger für die Veröffentlichungs Datenbank ausgeführt.This stored procedure is executed at the Publisher on the publication database.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

  
sp_addmergefilter [ @publication = ] 'publication'   
        , [ @article = ] 'article'   
        , [ @filtername = ] 'filtername'   
        , [ @join_articlename = ] 'join_articlename'   
        , [ @join_filterclause = ] join_filterclause  
    [ , [ @join_unique_key = ] join_unique_key ]  
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]  
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]  
    [ , [ @filter_type = ] filter_type ]  

ArgumenteArguments

[ @publication = ] 'publication'Der Name der Veröffentlichung, in der der Mergefilter hinzugefügt wird.[ @publication = ] 'publication' Is the name of the publication in which the merge filter is being added. Publication ist vom Datentyp vom Datentyp sysnameund hat keinen Standardwert.publication is sysname, with no default.

[ @article = ] 'article'Der Name des Artikels, für den der Mergefilter hinzugefügt wird.[ @article = ] 'article' Is the name of the article on which the merge filter is being added. der Artikel ist vom Datentyp vom Datentyp sysnameund hat keinen Standardwert.article is sysname, with no default.

[ @filtername = ] 'filtername'Der Name des Filters.[ @filtername = ] 'filtername' Is the name of the filter. Filter Name ist ein erforderlicher Parameter.filtername is a required parameter. Filter Nameist vom Datentyp vom Datentyp sysnameund hat keinen Standardwert.filternameis sysname, with no default.

[ @join_articlename = ] 'join_articlename'Der übergeordnete Artikel, mit dem der durch Artikelangegebene untergeordnete Artikel mithilfe der von join_filterclauseangegebenen joinklausel verknüpft werden muss, um die Zeilen im untergeordneten Artikel zu ermitteln, die das Filter Kriterium des Mergefilters erfüllen.[ @join_articlename = ] 'join_articlename' Is the parent article to which the child article, specified by article, must be joined using the join clause specified by join_filterclause, in order to determine the rows in the child article that meet the filter criterion of the merge filter. join_articlename ist vom Datentyp vom Datentyp sysnameund hat keinen Standardwert.join_articlename is sysname, with no default. Der Artikel muss in der Veröffentlichung vorliegen, die von der Veröffentlichungangegeben wird.The article must be in the publication given by publication.

[ @join_filterclause = ] join_filterclauseDie Join-Klausel, die verwendet werden muss, um den untergeordneten Artikel zu verknüpfen, der durch den Artikelund den von join_articleangegebenen übergeordneten Artikel angegeben wird, um die Zeilen zu bestimmen, die den Mergefilter qualifizieren[ @join_filterclause = ] join_filterclause Is the join clause that must be used to join the child article specified by articleand parent article specified by join_article, in order to determine the rows qualifying the merge filter. join_filterclause ist vom Datentyp nvarchar (1000) .join_filterclause is nvarchar(1000).

[ @join_unique_key = ] join_unique_keyGibt an, ob der Join zwischendem untergeordneten Artikel und dem übergeordneten Artikel join_article"1: n", "eins zu eins", "n:1" oder "m:n" ist.[ @join_unique_key = ] join_unique_key Specifies if the join between child article articleand parent article join_articleis one-to-many, one-to-one, many-to-one, or many-to-many. join_unique_key ist vom Datentyp intund hat den Standardwert 0.join_unique_key is int, with a default of 0. der Wert 0 gibt einen n:1-oder eine m:n-Join an.0 indicates a many-to-one or many-to-many join. 1 gibt einen 1:1-oder 1: n-Join an.1 indicates a one-to-one or one-to-many join. Dieser Wert ist 1 , wenn die Joinspalten einen eindeutigen Schlüssel in join_articlebilden oder wenn join_filterclause zwischen einem Fremdschlüssel im Artikel und einem Primärschlüssel in join_articleliegt.This value is 1 when the joining columns form a unique key in join_article, or if join_filterclause is between a foreign key in article and a primary key in join_article.

Achtung

Legen Sie diesen Parameter nur auf 1 fest, wenn eine Einschränkung für die Spalte beitreten in der zugrunde liegenden Tabelle für den übergeordneten Artikel vorhanden ist, der die Eindeutigkeit gewährleistet.Only set this parameter to 1 if you have a constraint on the joining column in the underlying table for the parent article that guarantees uniqueness. Wenn join_unique_key fälschlicherweise auf 1 festgelegt ist, kann eine nicht Konvergenz von Daten auftreten.If join_unique_key is set to 1 incorrectly, non-convergence of data may occur.

[ @force_invalidate_snapshot = ] force_invalidate_snapshotBestätigt, dass die von dieser gespeicherten Prozedur ausgeführte Aktion eine vorhandene Momentaufnahme für ungültig erklären kann.[ @force_invalidate_snapshot = ] force_invalidate_snapshot Acknowledges that the action taken by this stored procedure may invalidate an existing snapshot. force_invalidate_snapshot ist ein Bitund hat den Standardwert 0.force_invalidate_snapshot is a bit, with a default 0.

der Wert 0 gibt an, dass Änderungen am Mergeartikel nicht bewirken, dass die Momentaufnahme ungültig wird.0 specifies that changes to the merge article will not cause the snapshot to be invalid. Wenn die gespeicherte Prozedur erkennt, dass die Änderung eine neue Momentaufnahme erfordert, tritt ein Fehler auf, und es werden keine Änderungen vorgenommen.If the stored procedure detects that the change does require a new snapshot, an error will occur and no changes will be made.

der Wert 1 gibt an, dass Änderungen am Mergeartikel bewirken können, dass die Momentaufnahme ungültig wird. wenn Abonnements vorhanden sind, die eine neue Momentaufnahme erfordern, wird die Berechtigung erteilt, die vorhandene Momentaufnahme als veraltet zu markieren und eine neue Momentaufnahme zu generieren.1 specifies that changes to the merge article may cause the snapshot to be invalid, and if there are existing subscriptions that would require a new snapshot, gives permission for the existing snapshot to be marked as obsolete and a new snapshot generated.

[ @force_reinit_subscription = ] force_reinit_subscriptionBestätigt, dass die von dieser gespeicherten Prozedur ausgeführte Aktion möglicherweise erfordert, dass vorhandene Abonnements erneut initialisiert werden.[ @force_reinit_subscription = ] force_reinit_subscription Acknowledges that the action taken by this stored procedure may require existing subscriptions to be reinitialized. force_reinit_subscription ist vom Typ Bitund hat den Standardwert 0.force_reinit_subscription is a bit, with a default of 0.

der Wert 0 gibt an, dass Änderungen am Mergeartikel nicht bewirken, dass das Abonnement erneut initialisiert wird.0 specifies that changes to the merge article will not cause the subscription to be reinitialized. Wenn die gespeicherte Prozedur erkennt, dass die Änderung die erneute Initialisierung von Abonnements erfordert, tritt ein Fehler auf, und es werden keine Änderungen durchgeführt.If the stored procedure detects that the change would require subscriptions to be reinitialized, an error will occur and no changes will be made.

der Wert 1 gibt an, dass Änderungen am Mergeartikel bewirken, dass vorhandene Abonnements erneut initialisiert werden, und erteilt die Berechtigung für die erneute Initialisierung des Abonnements.1 specifies that changes to the merge article will cause existing subscriptions to be reinitialized, and gives permission for the subscription reinitialization to occur.

[ @filter_type = ] filter_typeGibt den hinzu zufügenden Filtertyp an.[ @filter_type = ] filter_type Specifies the type of filter being added. filter_type ist vom Datentyp tinyint. die folgenden Werte sind möglich:filter_type is tinyint, and can be one of the following values.

WertValue DescriptionDescription
11 Nur Joinfilter.Join filter only. Erforderlich zur unter SQL Server CompactSQL Server Compact Stützung von-Abonnenten.Required to support SQL Server CompactSQL Server Compact Subscribers.
22 Nur logische Datensatzbeziehung.Logical record relationship only.
33 Sowohl Joinfilter als auch logische Datensatzbeziehung.Both join filter and logical record relationship.

Weitere Informationen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.For more information, see Group Changes to Related Rows with Logical Records.

RückgabecodewerteReturn Code Values

0 (Erfolg) oder 1 (Fehler)0 (success) or 1 (failure)

HinweiseRemarks

sp_addmergefilter wird bei der Mergereplikation verwendet.sp_addmergefilter is used in merge replication.

sp_addmergefilter kann nur mit Tabellen Artikeln verwendet werden.sp_addmergefilter can only be used with table articles. Artikel für Sichten und indizierte Sichten werden nicht unterstützt.View and indexed view articles are not supported.

Dieses Verfahren kann auch verwendet werden, um eine logische Beziehung zwischen zwei Artikeln hinzuzufügen, zwischen denen möglicherweise ein Joinfilter vorhanden ist.This procedure can also be used to add a logical relationship between two articles that may or may not have a join filter between them. filter_type wird verwendet, um anzugeben, ob der hinzugefügte Zusammenführungs Filter ein Joinfilter, eine logische Beziehung oder beides ist.filter_type is used to specify if the merge filter being added is a join filter, a logical relation, or both.

Um logische Datensätze verwenden zu können, müssen die Veröffentlichung und die Artikel eine Reihe von Anforderungen erfüllen.To use logical records, the publication and articles must meet a number of requirements. Weitere Informationen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.For more information, see Group Changes to Related Rows with Logical Records.

Diese Option wird normalerweise für einen Artikel verwendet, in dem ein Fremdschlüsselverweis auf eine veröffentlichte Primärschlüsseltabelle vorhanden ist und in dem für die Primärschlüsseltabelle ein Filter für den Artikel definiert ist.Typically, this option is used for an article that has a foreign key reference to a published primary key table, and the primary key table has a filter defined in its article. Mithilfe der Teilmenge von Primärschlüsselzeilen werden die Fremdschlüsselzeilen ermittelt, die auf den Abonnenten repliziert werden.The subset of primary key rows is used to determine the foreign key rows that are replicated to the Subscriber.

Wenn die Quelltabellen für zwei veröffentlichte Artikel denselben Tabellenobjektnamen aufweisen, können Sie keinen Joinfilter für die beiden Artikel hinzufügen.You cannot add a join filter between two published articles when the source tables for both articles share the same table object name. In einem solchen Fall kann kein Joinfilter erstellt werden, selbst wenn beide Tabellen im Besitz unterschiedlicher Schemas sind und eindeutige Artikelnamen aufweisen.In such a case, even if both tables are owned by different schemas and have unique article names, creation of the join filter will fail.

Werden sowohl ein parametrisierter Zeilenfilter als auch ein Joinfilter für einen Tabellenartikel verwendet, ermittelt die Replikation, ob eine Zeile der Partition eines Abonnenten angehört.When both a parameterized row filter and a join filter are used on a table article, replication determines whether a row belongs in a Subscriber's partition. Dies erfolgt durch Auswerten der Filterfunktion oder des Joinfilters (mit dem or -Operator), anstatt die Schnittmenge der beiden Bedingungen (mit dem and- Operator) auszuwerten.It does so by evaluating either the filtering function or the join filter (using the OR operator), rather than evaluating the intersection of the two conditions (using the AND operator).

BeispielExample

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.EmployeeID = 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

BerechtigungenPermissions

Nur Mitglieder der festen Server Rolle sysadmin oder der festen Daten Bank Rolle db_owner können sp_addmergefilterausführen.Only members of the sysadmin fixed server role or db_owner fixed database role can execute sp_addmergefilter.

Siehe auchSee Also

Define an Article Define an Article
Definieren und Ändern eines Verknüpfungsfilters zwischen Mergeartikeln Define and Modify a Join Filter Between Merge Articles
Join Filters Join Filters
sp_changemergefilter (Transact-SQL) sp_changemergefilter (Transact-SQL)
sp_dropmergefilter (Transact-SQL) sp_dropmergefilter (Transact-SQL)
sp_helpmergefilter (Transact-SQL) sp_helpmergefilter (Transact-SQL)
Gespeicherte Automatisierungsprozeduren (Transact-SQL)Replication Stored Procedures (Transact-SQL)