Freigeben über


Definieren oder Ändern eines statischen Zeilenfilters

In diesem Thema wird beschrieben, wie Sie einen statischen Zeilenfilter in SQL Server 2014 mithilfe von SQL Server Management Studio oder Transact-SQL definieren und ändern.

In diesem Thema

Vorbereitungen

Einschränkungen

  • Wenn Sie einen statischen Zeilenfilter hinzufügen, ändern oder löschen, nachdem Abonnements für die Veröffentlichung initialisiert wurden, müssen Sie eine neue Momentaufnahme generieren und alle Abonnements nach vorgenommener Änderung erneut initialisieren. Weitere Informationen zum Ändern von Eigenschaften finden Sie unter Ändern von Veröffentlichungs- und Artikeleigenschaften.

  • Wenn die Veröffentlichung für die Peer-zu-Peer-Transaktionsreplikation aktiviert wird, können Tabellen nicht gefiltert werden.

Empfehlungen

Verwendung von SQL Server Management Studio

Definieren, ändern und löschen Sie statische Zeilenfilter auf der Seite Tabellenzeilen filtern des Assistenten für neue Veröffentlichung oder auf der Seite Zeilen filtern des Dialogfelds Veröffentlichungseigenschaften – <Veröffentlichung> . Weitere Informationen zum Verwenden des Assistenten sowie Zugriff auf das Dialogfeld finden Sie unter Erstellen einer Veröffentlichung und Anzeigen und Ändern von Veröffentlichungseigenschaften.

So definieren Sie einen statischen Zeilenfilter

  1. Auf der Seite Tabellenzeilen filtern des Assistenten für neue Veröffentlichungen oder auf der Seite Zeilen filtern des Dialogfelds Veröffentlichungseigenschaften – <Veröffentlichung> hängt die Aktion, die Sie ausführen, vom Typ der Veröffentlichung ab:

    • Klicken Sie bei der Momentaufnahme- oder Transaktionsveröffentlichung auf Hinzufügen.

    • Klicken Sie bei der Mergeveröffentlichung auf Hinzufügenund dann auf Filter hinzufügen.

  2. Wählen Sie in der Dropdownliste im Dialogfeld Filter hinzufügen die zu filternde Tabelle aus.

  3. Erstellen Sie im Textfeld Filteranweisung eine Filteranweisung. Sie können den Text direkt in den Textbereich eingeben, und Sie können Spalten auch mit Drag und Drop aus dem Listenfeld Spalten einfügen.

    Hinweis

    Verwenden Sie einen zweiteiligen Namen für die WHERE-Klausel, drei- oder vierteilige Namen werden nicht unterstützt. Wenn die Veröffentlichung von einem Oracle-Verleger stammt, muss die WHERE-Klausel mit der Oracle-Syntax kompatibel sein.

    • Der Textbereich Filteranweisung enthält den Standardtext im folgenden Format:

      SELECT <published_columns> FROM [schema].[tablename] WHERE  
      
    • Der Standardtext kann nicht geändert werden. Geben Sie mithilfe der SQL-Standardsyntax im Anschluss an das WHERE-Schlüsselwort die Filterklausel ein. Die vollständige Filterklausel würde folgendermaßen lauten:

      SELECT <published_columns> FROM [HumanResources].[Employee] WHERE [LoginID] = 'adventure-works\ranjit0'  
      
    • Ein statischer Zeilenfilter kann eine benutzerdefinierte Funktion einschließen. Die vollständige Filterklausel für einen statischen Zeilenfilter mit einer benutzerdefinierten Funktion würde folgendermaßen lauten:

      SELECT <published_columns> FROM [Sales].[SalesOrderHeader] WHERE MyFunction([Freight]) > 100  
      
  4. Klicken Sie auf OK.

  5. Wenn Sie sich im Dialogfeld Veröffentlichungseigenschaften – <Veröffentlichung> befinden, klicken Sie auf OK , um das Dialogfeld zu speichern und zu schließen.

So ändern Sie einen statischen Zeilenfilter

  1. Wählen Sie auf der Seite Tabellenzeilen filtern des Assistenten für neue Veröffentlichung oder auf der Seite Filterzeilen des Dialogfelds Veröffentlichungseigenschaften – <Veröffentlichung> im Bereich Gefilterte Tabellen einen Filter aus, und klicken Sie dann auf Bearbeiten.

  2. Ändern Sie den Filter im Dialogfeld Filter bearbeiten .

  3. Klicken Sie auf OK.

So löschen Sie einen statischen Zeilenfilter

  1. Wählen Sie auf der Seite Tabellenzeilen filtern des Assistenten für neue Veröffentlichung oder auf der Seite Zeilen filtern des Dialogfelds Veröffentlichungseigenschaften – <Veröffentlichung> im Bereich Gefilterte Tabellen einen Filter aus, und klicken Sie dann auf Löschen.

Verwenden von Transact-SQL

Wenn Sie Tabellenartikel erstellen, können Sie eine WHERE-Klausel definieren, um Zeilen aus einem Artikel zu filtern. Zudem können Sie einen Zeilenfilter ändern, nachdem er definiert wurde. Statische Zeilenfilter können mithilfe gespeicherter Replikationsprozeduren programmgesteuert erstellt und geändert werden.

So definieren Sie einen statischen Zeilenfilter für eine Momentaufnahme- oder Transaktionsveröffentlichung

  1. Definieren Sie den zu filternden Artikel. Weitere Informationen finden Sie unter Definieren eines Artikels.

  2. Führen Sie auf dem Verleger in der Veröffentlichungsdatenbank sp_articlefilter (Transact-SQL) aus. Geben Sie den Namen des Artikels für @article, den Namen der Publikation für @publication, einen Namen für den Filter für @filter_name und die Filterklausel für @filter_clause (ohne WHERE).

  3. Wenn außerdem ein Spaltenfilter definiert werden muss, finden Sie Informationen unter Definieren und Ändern eines Spaltenfilters. Führen Sie andernfalls sp_articleview (Transact-SQL) aus. Geben Sie den Veröffentlichungsnamen für @publication, den Namen des gefilterten Artikels für @article und die in Schritt 2 für @filter_clause angegebene Filterklausel an. Damit werden die Synchronisierungsobjekte für den gefilterten Artikel erstellt.

So ändern Sie einen statischen Zeilenfilter für eine Momentaufnahme- oder Transaktionsveröffentlichung

  1. Führen Sie auf dem Verleger in der Veröffentlichungsdatenbank sp_articlefilter (Transact-SQL) aus. Geben Sie den Namen des Artikels für @article, den Namen der Publikation für @publication, einen Namen für den neuen Filter für @filter_name und die neue Filterklausel für @filter_clause (ohne ).WHERE Da durch diese Änderung Daten in vorhandenen Abonnements ungültig werden, geben Sie den Wert 1 für @force_reinit_subscription an.

  2. Führen Sie auf dem Verleger in der Veröffentlichungsdatenbank sp_articleview (Transact-SQL) aus. Geben Sie den Veröffentlichungsnamen für @publication, den Namen des gefilterten Artikels für @article und die in Schritt 1 für @filter_clause angegebene Filterklausel an. Dadurch wird die Sicht neu erstellt, die den gefilterten Artikel definiert.

  3. Führen Sie den Auftrag des Momentaufnahme-Agents für die Veröffentlichung erneut aus, um eine aktualisierte Momentaufnahme zu erstellen. Weitere Informationen finden Sie unter Create and Apply the Initial Snapshot.

  4. Erneutes Initialisieren von Abonnements Weitere Informationen finden Sie unter Erneutes Initialisieren von Abonnements.

So löschen Sie einen statischen Zeilenfilter für eine Momentaufnahme- oder Transaktionsveröffentlichung

  1. Führen Sie auf dem Verleger in der Veröffentlichungsdatenbank sp_articlefilter (Transact-SQL) aus. Geben Sie den Namen des Artikels für @article, den Namen der Publikation für @publication, den Wert NULL für @filter_name und den Wert NULL für @filter_clause an. Da durch diese Änderung Daten in vorhandenen Abonnements ungültig werden, geben Sie den Wert 1 für @force_reinit_subscription an.

  2. Führen Sie den Auftrag des Momentaufnahme-Agents für die Veröffentlichung erneut aus, um eine aktualisierte Momentaufnahme zu erstellen. Weitere Informationen finden Sie unter Create and Apply the Initial Snapshot.

  3. Erneutes Initialisieren von Abonnements Weitere Informationen finden Sie unter Erneutes Initialisieren von Abonnements.

So definieren Sie einen statischen Zeilenfilter für eine Mergeveröffentlichung

  1. Führen Sie auf dem Verleger in der Veröffentlichungsdatenbank sp_addmergearticle (Transact-SQL) aus. Geben Sie die Filterklausel für @subset_filterclause an (ohne ).WHERE Weitere Informationen finden Sie unter Definieren eines Artikels.

  2. Wenn außerdem ein Spaltenfilter definiert werden muss, finden Sie Informationen unter Definieren und Ändern eines Spaltenfilters.

So ändern Sie einen statischen Zeilenfilter für eine Mergeveröffentlichung

  1. Führen Sie auf dem Verleger in der Veröffentlichungsdatenbank sp_changemergearticle (Transact-SQL) aus. Geben Sie den Veröffentlichungsnamen für @publication, den Namen des gefilterten Artikels für @article, den Wert subset_filterclause für @property und die neue Filterklausel für @value (ohne WHERE). Da durch diese Änderung Daten in vorhandenen Abonnements ungültig werden, geben Sie den Wert 1 für @force_reinit_subscription an.

  2. Führen Sie den Auftrag des Momentaufnahme-Agents für die Veröffentlichung erneut aus, um eine aktualisierte Momentaufnahme zu erstellen. Weitere Informationen finden Sie unter Create and Apply the Initial Snapshot.

  3. Erneutes Initialisieren von Abonnements Weitere Informationen finden Sie unter Erneutes Initialisieren von Abonnements.

Beispiele (Transact-SQL)

In diesem Beispiel für eine Transaktionsreplikation wird der Artikel horizontal gefiltert, um alle eingestellten Produkte zu entfernen.

DECLARE @publication    AS sysname;
DECLARE @table AS sysname;
DECLARE @filterclause AS nvarchar(500);
DECLARE @filtername AS nvarchar(386);
DECLARE @schemaowner AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @table = N'Product';
SET @filterclause = N'[DiscontinuedDate] IS NULL'; 
SET @filtername = N'filter_out_discontinued';
SET @schemaowner = N'Production';

-- Add a horizontally and vertically filtered article for the Product table.
-- Manually set @schema_option to ensure that the Production schema 
-- is generated at the Subscriber (0x8000000).
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @table, 
    @source_object = @table,
    @source_owner = @schemaowner, 
    @schema_option = 0x80030F3,
    @vertical_partition = N'true', 
    @type = N'logbased',
    @filter_clause = @filterclause;

-- (Optional) Manually call the stored procedure to create the 
-- horizontal filtering stored procedure. Since the type is 
-- 'logbased', this stored procedures is executed automatically.
EXEC sp_articlefilter 
    @publication = @publication, 
    @article = @table, 
    @filter_clause = @filterclause, 
    @filter_name = @filtername;

-- Add all columns to the article.
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table;

-- Remove the DaysToManufacture column from the article
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table, 
    @column = N'DaysToManufacture', 
    @operation = N'drop';

-- (Optional) Manually call the stored procedure to create the 
-- vertical filtering view. Since the type is 'logbased', 
-- this stored procedures is executed automatically.
EXEC sp_articleview 
    @publication = @publication, 
    @article = @table,
    @filter_clause = @filterclause;
GO

In diesem Beispiel für eine Mergereplikation werden die Artikel horizontal gefiltert, und nur die Zeilen zurückgegeben, die auf den angegebenen Vertriebsmitarbeiter entfallen. Außerdem wird ein Joinfilter verwendet. Weitere Informationen finden Sie unter Definieren und Ändern eines Verknüpfungsfilters zwischen Mergeartikeln.

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

Weitere Informationen

Definieren und Ändern eines parametrisierten Zeilenfilters für einen Mergeartikel
Ändern von Veröffentlichungs- und Artikeleigenschaften
Filtern von veröffentlichten Daten
Filtern veröffentlichter Daten für die Mergereplikation