sp_articlefilter (Transact-SQL)

Gilt für: SQL Server Azure 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 das Schlüsselwort WHEREweg. @filter_clause ist nvarchar(max), mit einem Standardwert von NULL.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

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

  • 0 Gibt an, dass Änderungen am Artikel nicht dazu führen, dass die Momentaufnahme ungültig ist. Wenn die gespeicherte Prozedur erkennt, dass die Änderungen eine neue Momentaufnahme erfordern, tritt ein Fehler auf und es werden keine Änderungen vorgenommen.
  • 1 Gibt an, dass Änderungen am Artikel dazu führen können, dass die Momentaufnahme ungültig ist. Wenn vorhandene Abonnements vorhanden sind, die eine neue Momentaufnahme erfordern würden, erteilen Sie die Berechtigung, dass die vorhandene Momentaufnahme als veraltet markiert 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_articlefilter wird in der Momentaufnahmereplikation 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 ein und fügt dann den Text der Einschränkungsklausel in die filter_clause Spalte ein.

Um einen Artikel mit einem horizontalen Filter zu erstellen, führen Sie sp_addarticle ohne @filter_name Parameter aus . Führen Sie sp_articlefilteraus, wobei alle Parameter einschließlich @filter_clause bereitgestellt werden, und führen Sie dann sp_articleview aus, und stellen Sie alle Parameter einschließlich der identischen @filter_clause bereit. Wenn der Filter bereits vorhanden ist und wenn es sich um type sysarticles 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.