sp_articlefilter (Transact-SQL)

Filtert Daten, die auf der Basis eines Tabellenartikels veröffentlicht werden. Diese gespeicherte Prozedur wird beim Verleger mit der Veröffentlichungsdatenbank ausgeführt.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

sp_articlefilter [ @publication = ] 'publication'
        , [ @article = ] 'article'
    [ , [ @filter_name = ] 'filter_name' ]
    [ , [ @filter_clause = ] 'filter_clause' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] 'publisher' ]

Argumente

  • [ @publication=] 'publication'
    Der Name der Veröffentlichung, die den Artikel enthält. publication ist vom Datentyp sysname und hat keinen Standardwert.

  • [ @article=] 'article'
    Der Name des Artikels. article ist vom Datentyp sysname und hat keinen Standardwert.

  • [ @filter_name=] 'filter_name'
    Der Name der gespeicherten Filterprozedur, die von filter_name erstellt werden soll. filter_name ist vom Datentyp nvarchar(386) und hat den Standardwert NULL. Sie müssen einen eindeutigen Namen für den Artikelfilter angeben.

  • [ @filter_clause=] 'filter_clause'
    Eine Einschränkungsklausel (WHERE), die einen horizontalen Filter definiert. Verwenden Sie bei der Eingabe der Beschränkungsklausel nicht das WHERE-Schlüsselwort. filter_clause ist vom Datentyp ntext; der Standardwert ist NULL.

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

    Der Wert 0 gibt an, dass Änderungen am Artikel 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 Artikels 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 und hat den Standardwert 0.

    0 gibt an, dass Änderungen am Artikel nicht bewirken, dass Abonnements erneut initialisiert werden müssen. 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 Artikel die erneute Initialisierung vorhandener Abonnements bewirken. Außerdem wird mit diesem Wert die Berechtigung zur erneuten Initialisierung des Abonnements erteilt.

  • [ @publisher= ] 'publisher'
    Gibt einen Nicht-MicrosoftSQL Server-Verleger an. publisher ist ein Wert vom Datentyp sysname; der Standardwert ist NULL.

    HinweisHinweis

    publisher sollte nicht mit einem SQL Server-Verleger verwendet werden.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Hinweise

sp_articlefilter wird bei der Snapshot- und Transaktionsreplikation verwendet.

Das Ausführen von sp_articlefilter für einen Artikel mit vorhandenen Abonnements setzt die erneute Initialisierung dieser Abonnements voraus.

sp_articlefilter erstellt den Filter und fügt die ID der gespeicherten Filterprozedur in die filter-Spalte der sysarticles (Transact-SQL)-Tabelle und dann den Text der Einschränkungsklausel in die filter_clause-Spalte ein.

Führen Sie sp_addarticle (Transact-SQL) ohne filter-Parameter aus, um einen Artikel mit einem horizontalen Filter zu erstellen. Führen Sie sp_articlefilter aus, und geben Sie dabei alle Parameter an, einschließlich filter_clause. Führen Sie dann sp_articleview (Transact-SQL) aus, und geben Sie dabei alle Parameter an, einschließlich eines identischen Werts für filter_clause. Wenn der Filter bereits vorhanden und type in sysarticles gleich 1 (protokollbasierter Artikel) ist, wird der vorherige Filter gelöscht und ein neuer Filter erstellt.

Wenn Sie filter_name und filter_clause nicht angeben, wird der bestehende Filter gelöscht, und die Filter-ID wird auf 0 festgelegt.

Beispiel

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

Berechtigungen

Nur Mitglieder der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner können sp_articlefilter ausführen.