Definieren und Ändern eines Spaltenfilters

Gilt für:SQL ServerAzure SQL Managed Instance

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

In diesem Thema

Vorbereitungen

Einschränkungen

  • Einige Spalten können nicht gefiltert werden. Weitere Informationen dazu finden Sie unter Filtern von veröffentlichten Daten. Wenn Sie einen Spaltenfilter ändern, nachdem Abonnements initialisiert wurden, müssen Sie eine neue Momentaufnahme generieren. Außerdem müssen nach der Änderung alle Abonnements erneut initialisiert werden. Weitere Informationen zum Ändern von Eigenschaften finden Sie unter Ändern von Veröffentlichungs- und Artikeleigenschaften.

Verwendung von SQL Server Management Studio

Spaltenfilter werden auf der Seite Artikel des Assistenten für neue Veröffentlichung definiert. Weitere Informationen zum Verwenden des Assistenten für neue Veröffentlichung finden Sie unter Erstellen einer Veröffentlichung.

Definieren und Ändern von Spaltenfiltern auf der Seite "Artikel " des Dialogfelds "Publikationseigenschaften - <Publikation> ". Weitere Informationen zu Veröffentlichungs- und Artikeleigenschaften finden Sie unter Anzeigen und Ändern von Veröffentlichungseigenschaften.

So definieren Sie einen Spaltenfilter

  1. Erweitern Sie im Bereich Zu veröffentlichende Objekte auf der Seite Artikel des Assistenten für neue Veröffentlichung die zu filternde Tabelle.

  2. Klicken Sie auf die Kontrollkästchen für alle Spalten, die herausgefiltert werden sollen, um deren Markierung aufzuheben.

So ändern Sie die Spaltenfilterung

  1. Erweitern Sie auf der Seite "Artikel" des Dialogfelds "Publikationseigenschaften<>" die Tabelle, die im Bereich "Objekte zum Veröffentlichen" gefiltert werden soll.

  2. Klicken Sie auf die Kontrollkästchen für alle Spalten, die herausgefiltert werden sollen, um deren Markierung aufzuheben, und stellen Sie sicher, dass die Kontrollkästchen für die Spalten, die im Artikel enthalten sein sollen, markiert sind.

  3. Klickan Sie auf OK.

Verwenden von Transact-SQL

Während der Erstellung von Tabellenartikeln können Sie definieren, welche Spalten in den Artikel aufgenommen werden sollen. Nachdem der Artikel definiert wurde, können Sie die Spalten noch ändern. Gefilterte Spalten können mithilfe gespeicherter Replikationsprozeduren programmgesteuert definiert und geändert werden.

Hinweis

Im Folgenden wird davon ausgegangen, dass sich die zugrunde liegende Tabelle nicht geändert hat. Informationen zur Replikation von DDL-Änderungen (Data Definition Language, Datendefinitionssprache) an veröffentlichten Tabellen finden Sie unter Vornehmen von Schemaänderungen in Veröffentlichungsdatenbanken.

So definieren Sie einen Spaltenfilter für einen in einer Momentaufnahme- oder einer Transaktionsveröffentlichung veröffentlichten Artikel

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

  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_articlecolumnaus. Damit werden die Spalten definiert, die in den Artikel aufgenommen oder daraus entfernt werden sollen.

    • Wenn nur einige wenige Spalten aus einer viele Spalten umfassenden Tabelle veröffentlicht werden sollen, führen Sie sp_articlecolumn einmal für jede hinzuzufügende Spalte aus. Geben Sie den Spaltennamen für @column und den Wert add für @operationan.

    • Wenn die meisten Spalten einer umfangreichen Tabelle veröffentlicht werden sollen, führen Sie sp_articlecolumnunter Angabe des Werts null für @column und des Werts add für @operation aus, um alle Spalten hinzuzufügen. Führen Sie dann für die auszuschließenden Spalten jeweils einmal sp_articlecolumnunter Angabe des Werts drop für @operation und des Namens der auszuschließenden Spalte für @columnaus.

  3. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_articleviewaus. Geben Sie den Namen der Veröffentlichung für @publication und den Namen des gefilterten Artikels für @articlean. Damit werden die Synchronisierungsobjekte für den gefilterten Artikel erstellt.

So ändern Sie einen Spaltenfilter, um zusätzliche Spalten in einen Artikel aufzunehmen, der in einer Momentaufnahme- oder Transaktionsveröffentlichung veröffentlicht wurde

  1. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_articlecolumn einmal für jede zu hinzuzufügende Spalte aus. Geben Sie den Spaltennamen für @column und den Wert add für @operationan.

  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_articleviewaus. Geben Sie den Namen der Veröffentlichung für @publication und den Namen des gefilterten Artikels für @articlean. Wenn für die Veröffentlichung Abonnements vorhanden sind, geben Sie den Wert 1 für @change_activean. Damit werden die Synchronisierungsobjekte für den gefilterten Artikel erneut erstellt.

  3. Führen Sie den Auftrag des Momentaufnahme-Agents für die Veröffentlichung erneut aus, um eine aktualisierte Momentaufnahme zu erstellen.

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

So ändern Sie einen Spaltenfilter, um Spalten aus einem Artikel zu entfernen, der in einer Momentaufnahme- oder Transaktionsveröffentlichung veröffentlicht wurde

  1. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_articlecolumn einmal für jede zu entfernende Spalte aus. Geben Sie den Spaltennamen für @column und den Wert drop für @operationan.

  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_articleviewaus. Geben Sie den Namen der Veröffentlichung für @publication und den Namen des gefilterten Artikels für @articlean. Wenn für die Veröffentlichung Abonnements vorhanden sind, geben Sie den Wert 1 für @change_activean. Damit werden die Synchronisierungsobjekte für den gefilterten Artikel erneut erstellt.

  3. Führen Sie den Auftrag des Momentaufnahme-Agents für die Veröffentlichung erneut aus, um eine aktualisierte Momentaufnahme zu erstellen.

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

So definieren Sie einen Spaltenfilter für einen Artikel, der in einer Mergeveröffentlichung veröffentlicht wurde

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

  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_mergearticlecolumnaus. Damit werden die Spalten definiert, die in den Artikel aufgenommen oder daraus entfernt werden sollen.

    • Wenn nur einige wenige Spalten aus einer viele Spalten umfassenden Tabelle veröffentlicht werden sollen, führen Sie sp_mergearticlecolumn einmal für jede hinzuzufügende Spalte aus. Geben Sie den Spaltennamen für @column und den Wert add für @operationan.

    • Wenn die meisten Spalten einer umfangreichen Tabelle veröffentlicht werden sollen, führen Sie sp_mergearticlecolumnunter Angabe des Werts null für @column und des Werts add für @operation aus, um alle Spalten hinzuzufügen. Führen Sie dann für die auszuschließenden Spalten jeweils einmal sp_mergearticlecolumnunter Angabe des Werts drop für @operation und des Namens der auszuschließenden Spalte für @columnaus.

So ändern Sie einen Spaltenfilter, um zusätzliche Spalten in einen Artikel aufzunehmen, der in einer Mergeveröffentlichung veröffentlicht wurde

  1. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_mergearticlecolumn einmal für jede zu hinzuzufügende Spalte aus. Geben Sie den Spaltennamen für @column, den Wert add für @operation und den Wert 1 sowohl für @force_invalidate_snapshot als auch für @force_reinit_subscriptionan.

  2. Führen Sie den Auftrag des Momentaufnahme-Agents für die Veröffentlichung erneut aus, um eine aktualisierte Momentaufnahme zu erstellen.

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

So ändern Sie einen Spaltenfilter, um Spalten aus einem Artikel zu entfernen, der in einer Mergeveröffentlichung veröffentlicht wurde

  1. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_mergearticlecolumn einmal für jede zu entfernende Spalte aus. Geben Sie den Spaltennamen für @column, den Wert drop für @operation und den Wert 1 sowohl für @force_invalidate_snapshot als auch für @force_reinit_subscriptionan.

  2. Führen Sie den Auftrag des Momentaufnahme-Agents für die Veröffentlichung erneut aus, um eine aktualisierte Momentaufnahme zu erstellen.

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

Beispiel (Transact-SQL)

In diesem Beispiel für Transaktionsreplikation wird die Spalte DaysToManufacture aus einem Artikel entfernt, der auf der Tabelle Product basiert.

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 wird die Spalte CreditCardApprovalCode aus einem Artikel entfernt, der auf der Tabelle SalesOrderHeader basiert.

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

Ändern von Veröffentlichungs- und Artikeleigenschaften
Filtern von veröffentlichten Daten
Filtern veröffentlichter Daten für die Mergereplikation