sp_articlefilter (Transact-SQL)

Gilt für:SQL ServerAzure SQL Managed Instance

Filtert Daten, die basierend auf einem Tabellenartikel veröffentlicht werden. Diese gespeicherte Prozedur wird im Publisher in der Publikationsdatenbank ausgeführt.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

[ @publication = ] N'Publikation'

Der Name der Publikation, die den Artikel enthält. @publication ist "sysname" ohne Standard.

[ @article = ] N'article'

Der Name des Artikels. @article ist "sysname" ohne Standard.

[ @filter_name = ] N'filter_name'

Der Name der gespeicherten Filterprozedur, die aus dem @filter_name erstellt werden soll. @filter_name ist nvarchar(517), wobei die Standardeinstellung istNULL. Sie müssen einen eindeutigen Namen für den Artikelfilter angeben.

[ @filter_clause = ] N'filter_clause'

Eine Einschränkungsklausel (WHERE), die einen horizontalen Filter definiert. Wenn Sie die Einschränkungsklausel eingeben, lassen Sie die Schlüsselwort (keyword) WHEREweg. @filter_clause ist nvarchar(max), mit einem Standardwert von NULL.

[ @force_invalidate_snapshot = ] force_invalidate_Momentaufnahme

Erkennt an, dass die von dieser gespeicherten Prozedur ausgeführte Aktion möglicherweise eine vorhandene Momentaufnahme ungültig macht. @force_invalidate_Momentaufnahme ist bit, mit einem Standardwert von 0.

  • 0Gibt an, dass Änderungen am Artikel nicht dazu führen, dass die Momentaufnahme ungültig sind. Wenn die gespeicherte Prozedur erkennt, dass die Änderungen eine neue Momentaufnahme erfordern, tritt ein Fehler auf und es werden keine Änderungen vorgenommen.
  • 1Gibt an, dass Änderungen am Artikel dazu führen können, dass die Momentaufnahme ungültig sind, und wenn vorhandene Abonnements vorhanden sind, die eine neue Momentaufnahme erfordern, erteilen Sie die Berechtigung, dass die vorhandenen Momentaufnahme als veraltet gekennzeichnet werden und eine neue Momentaufnahme generiert wird.

[ @force_reinit_subscription = ] force_reinit_subscription

Bestätigt, dass die von dieser gespeicherten Prozedur ausgeführte Aktion möglicherweise das erneute Initialisieren von vorhandenen Abonnements erfordert. @force_reinit_subscription ist bit, mit einem Standardwert von 0.

  • 0 Gibt an, dass Änderungen am Artikel nicht dazu führen, dass Abonnements erneut initialisiert werden müssen. Wenn die gespeicherte Prozedur erkennt, dass die Änderung abonnements erneut initialisiert werden muss, tritt ein Fehler auf, und es werden keine Änderungen vorgenommen.
  • 1 Gibt an, dass Änderungen am Artikel dazu führen, dass vorhandene Abonnements erneut initialisiert werden, und erteilt die Berechtigung für die Erneute Initialisierung des Abonnements.

[ @publisher = ] N'publisher'

Gibt einen Nicht-SQL Server-Herausgeber an. @publisher ist "sysname" mit der Standardeinstellung "NULL.

@publisher sollte nicht mit einem SQL Server-Publisher verwendet werden.

Rückgabecodewerte

0 (erfolgreich) oder 1 Fehler.

Hinweise

sp_articlefilterwird in Momentaufnahme Replikation und Transaktionsreplikation verwendet.

Die sp_articlefilter Ausführung für einen Artikel mit vorhandenen Abonnements erfordert, dass diese Abonnements erneut initialisiert werden.

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

Führen Sie sp_addarticle (Transact-SQL) ohne @filter_name Parameter aus, um einen Artikel mit einem horizontalen Filter zu erstellen. Ausführensp_articlefilter, Bereitstellen aller Parameter einschließlich @filter_clause, und führen Sie dann sp_articleview (Transact-SQL) aus, und stellen Sie alle Parameter einschließlich der identischen @filter_clause bereit. Wenn der Filter bereits vorhanden ist und wenn es sich um typesysarticles einen (protokollbasierten Artikel) handelt 1 , wird der vorherige Filter gelöscht und ein neuer Filter erstellt.

Wenn @filter_name und @filter_clause nicht bereitgestellt werden, wird der vorherige Filter gelöscht, und die Filter-ID wird auf 0.

Beispiele

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 db_owner feste Datenbankrolle können ausgeführt werden sp_articlefilter.