Freigeben über


sp_addmergefilter (Transact-SQL)

Fügt einen neuen Mergefilter hinzu, um eine Partition auf der Basis einer Verknüpfung mit einer anderen Tabelle zu erstellen. Diese gespeicherte Prozedur wird beim Verleger mit der Veröffentlichungsdatenbank ausgeführt.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

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 ]

Argumente

  • [ @publication= ] 'publication'
    Ist der Name der Veröffentlichung, der der Mergefilter hinzugefügt wird. publication ist vom Datentyp sysname und hat keinen Standardwert.

  • [ @article= ] 'article'
    Ist der Name des Artikels, für den der Mergefilter hinzugefügt wird. article ist vom Datentyp sysname und hat keinen Standardwert.

  • [ @filtername= ] 'filtername'
    Der Name des Filters. filtername ist ein erforderlicher Parameter. filtername ist vom Datentyp sysname und hat keinen Standardwert.

  • [ @join_articlename= ] 'join_articlename'
    Ist der übergeordnete Artikel, mit dem der durch article angegebene untergeordnete Artikel über die durch join_filterclause angegebene Verknüpfungsklausel verknüpft werden muss, um die Zeilen im untergeordneten Artikel zu ermitteln, die den Filterkriterien des Mergefilters entsprechen. join_articlename ist ein Wert vom Datentyp sysname und weist keinen Standardwert auf. Der Artikel muss sich in der mit publication angegebenen Veröffentlichung befinden.

  • [ @join_filterclause= ] join_filterclause
    Die Verknüpfungsklausel, die zum Verknüpfen des durch article angegebenen untergeordneten Artikels und des durch join_article angegebenen übergeordneten Artikels verwendet wird, um die Zeilen zu bestimmen, die dem Mergefilter entsprechen. join_filterclause ist ein Wert vom Datentyp nvarchar(1000).

  • [ @join_unique_key= ] join_unique_key
    Gibt an, ob die Verknüpfung zwischen dem untergeordneten Artikel article und dem übergeordneten Artikel join_article eine Verknüpfung vom Typ 1:n, 1:1, 1:n oder n:n ist. join_unique_key ist vom Datentyp int; der Standard ist 0. 0 gibt eine n:1- oder n:n-Verknüpfung an. 1 gibt eine 1:1- oder 1:n-Verknüpfung an. Der Wert ist 1, wenn die verknüpften Spalten einen eindeutigen Schlüssel in join_article bilden oder wenn join_filterclause zwischen einem Fremdschlüssel in article und einem primären Schlüssel in join_article liegt.

    VorsichtshinweisVorsicht

    Legen Sie diesen Parameter nur dann auf 1 fest, wenn eine Einschränkung für die zu verknüpfende Spalte in der zugrunde liegenden Tabelle für den übergeordneten Artikel vorliegt, die die Eindeutigkeit sicherstellt. Wird join_unique_key fälschlicherweise auf 1 festgelegt, kann dies zu mangelnder Konvergenz der Daten führen.

  • [ @force_invalidate_snapshot= ] force_invalidate_snapshot
    Bestätigt, dass die von dieser gespeicherten Prozedur durchgeführte Aktion einen vorhandenen Snapshot für ungültig erklären kann. force_invalidate_snapshot ist vom Datentyp bit; der Standardwert ist 0.

    Der Wert 0 gibt an, dass Änderungen am Mergeartikel nicht bewirken, dass der Snapshot ungültig wird. Wenn die gespeicherte Prozedur erkennt, dass die Änderungen einen neuen Snapshot erfordern, tritt ein Fehler auf, und es werden keine Änderungen durchgeführt.

    Der Wert 1 gibt an, dass der Snapshot durch Ändern des Mergeartikels ungültig werden kann. Wenn Abonnements vorhanden sind, die einen neuen Snapshot erfordern, wird mit diesem Wert die Berechtigung erteilt, den vorhandenen Snapshot als veraltet zu markieren und einen neuen Snapshot zu generieren.

  • [ @force_reinit_subscription= ] force_reinit_subscription
    Bestätigt, dass die von dieser gespeicherten Prozedur ausgeführte Aktion die erneute Initialisierung vorhandener Abonnements erfordern kann. force_reinit_subscription ist vom Datentyp bit; der Standardwert ist 0.

    Der Wert 0 gibt an, dass Änderungen am Mergeartikel nicht die erneute Initialisierung des Abonnements bewirken. 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.

    Der Wert 1 gibt an, dass Änderungen am Mergeartikel die erneute Initialisierung vorhandener Abonnements bewirken. Außerdem wird mit diesem Wert die Berechtigung zur erneuten Initialisierung des Abonnements erteilt.

  • [ @filter_type= ] filter_type
    Gibt den Filtertyp an, der hinzugefügt wird. filter_type ist vom Datentyp tinyint. Die folgenden Werte sind möglich.

    Wert

    Beschreibung

    1

    Nur Verknüpfungsfilter. Erforderlich für die Unterstützung von SQL Server Compact 3.5 SP2-Abonnenten.

    2

    Nur logische Datensatzbeziehung.

    3

    Sowohl Verknüpfungsfilter als auch logische Datensatzbeziehung.

    Weitere Informationen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Hinweise

sp_addmergefilter wird bei der Mergereplikation verwendet.

sp_addmergefilter kann nur mit Tabellenartikeln verwendet werden. Artikel für Sichten und indizierte Sichten werden nicht unterstützt.

Mit dieser Prozedur kann auch eine logische Beziehung zwischen zwei Artikeln hinzugefügt werden, die möglicherweise über einen Verknüpfungsfilter verbunden sind. Mit filter_type wird angegeben, ob es sich beim hinzugefügten Mergefilter um einen Verknüpfungsfilter, eine logische Beziehung oder um beides handelt.

Für die Verwendung logischer Datensätze müssen Veröffentlichung und Artikel eine Reihe von Anforderungen erfüllen. Weitere Informationen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.

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. Mithilfe der Teilmenge von Primärschlüsselzeilen werden die Fremdschlüsselzeilen ermittelt, die auf den Abonnenten repliziert werden.

Wenn die Quelltabellen für zwei veröffentlichte Artikel denselben Tabellenobjektnamen aufweisen, können Sie keinen Verknüpfungsfilter für die beiden Artikel hinzufügen. In einem solchen Fall kann kein Verknüpfungsfilter erstellt werden, selbst wenn beide Tabellen im Besitz unterschiedlicher Schemas sind und eindeutige Artikelnamen aufweisen.

Werden sowohl ein parametrisierter Zeilenfilter als auch ein Verknüpfungsfilter für einen Tabellenartikel verwendet, ermittelt die Replikation, ob eine Zeile der Partition eines Abonnenten angehört. Dies erfolgt durch Auswerten der filternden Funktion oder der Verknüpfungsfilter (mithilfe des OR-Operators) statt durch Auswerten der Schnittmenge der beiden Bedingungen (mithilfe des AND-Operators).

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_addmergefilter ausführen.