sp_articlefilter (Transact-SQL)

S’applique à :SQL ServerAzure SQL Managed Instance

Filtre les données publiées en fonction d’un article de table. Cette procédure stockée est exécutée sur le serveur de publication dans la base de données de publication.

Conventions de la syntaxe Transact-SQL

Syntaxe

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' ]
[ ; ]

Arguments

[ @publication = ] N’publication'

Nom de la publication qui contient l’article. @publication est sysname, sans valeur par défaut.

[ @article = ] N’article'

Nom de l’article. @article est sysname, sans valeur par défaut.

[ @filter_name = ] N’filter_name'

Nom de la procédure stockée de filtre à créer à partir de l '@filter_name. @filter_name est nvarchar(517), avec la valeur par défaut NULL. Vous devez spécifier un nom unique pour le filtre d'article.

[ @filter_clause = ] N’filter_clause'

Clause de restriction (WHERE) qui définit un filtre horizontal. Lorsque vous entrez la clause de restriction, omettez le mot clé WHERE. @filter_clause est nvarchar(max), avec la valeur par défaut NULL.

[ @force_invalidate_snapshot = ] force_invalidate_instantané

Reconnaît que l’action effectuée par cette procédure stockée peut invalider une instantané existante. @force_invalidate_instantané est bit, avec la valeur par défaut 0.

  • 0spécifie que les modifications apportées à l’article n’entraînent pas l’instantané non valide. Si la procédure stockée détecte que la modification requiert un nouvel instantané, une erreur se produit et aucune modification n'est effectuée.
  • 1spécifie que les modifications apportées à l’article peuvent entraîner l’instantané non valide et, si des abonnements existants nécessitent un nouveau instantané, donnent l’autorisation à l’instantané existante d’être marquée comme obsolète et qu’une nouvelle instantané générée.

[ @force_reinit_subscription = ] force_reinit_subscription

Confirme que l'action entreprise par cette procédure stockée peut nécessiter la réinitialisation des abonnements existants. @force_reinit_subscription est bit, avec la valeur par défaut 0.

  • 0 spécifie que les modifications apportées à l’article n’entraînent pas la réinitialisation des abonnements. Si la procédure stockée détecte que la modification requiert la réinitialisation des abonnements, une erreur se produit et aucune modification n'est effectuée.
  • 1 spécifie que les modifications apportées à l’article entraînent la réinitialisation des abonnements existants et autorisent la réinitialisation de l’abonnement.

[ @publisher = ] N’publisher'

Spécifie un serveur de publication non-SQL Server. @publisher est sysname, avec la valeur par défaut NULL.

@publisher ne doit pas être utilisé avec un serveur de publication SQL Server.

Valeurs des codes de retour

0 (réussite) ou 1 (échec).

Notes

sp_articlefilterest utilisé dans instantané réplication et la réplication transactionnelle.

L’exécution sp_articlefilter d’un article avec des abonnements existants nécessite que ces abonnements soient réinitialisés.

sp_articlefilter crée le filtre, insère l’ID de la procédure stockée de filtre dans la filter colonne de la table sysarticles (Transact-SQL), puis insère le texte de la clause de restriction dans la filter_clause colonne.

Pour créer un article avec un filtre horizontal, exécutez sp_addarticle (Transact-SQL) sans paramètre @filter_name . Exécutez sp_articlefilter, fournissant tous les paramètres, y compris @filter_clause, puis exécutez sp_articleview (Transact-SQL), en fournissant tous les paramètres, y compris les @filter_clause identiques. Si le filtre existe déjà et si l’élément typesysarticles est 1 (article basé sur le journal), le filtre précédent est supprimé et un nouveau filtre est créé.

Si @filter_name et @filter_clause ne sont pas fournis, le filtre précédent est supprimé et l’ID de filtre est défini sur 0.

Exemples

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

Autorisations

Seuls les membres du rôle serveur fixe sysadmin ou db_owner rôle de base de données fixe peuvent s’exécuter sp_articlefilter.