sp_articlefilter (Transact-SQL)
Filtre les données publiées en fonction d'un article de table. Cette procédure stockée est exécutée au niveau du serveur de publication dans la base de données de publication.
Syntaxe
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' ]
Arguments
[ @publication=] 'publication'
Nom de la publication qui contient l'article. publication est de type sysname et n'a pas de valeur par défaut.[ @article=] 'article'
Nom de l'article. article est de type sysname et n'a pas de valeur par défaut.[ @filter_name=] 'filter_name'
Nom de la procédure stockée de filtre à créer à partir de filter_name. filter_name est de type nvarchar(386), avec NULL comme valeur par défaut. Vous devez spécifier un nom unique pour le filtre d'article.[ @filter_clause=] '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 de type ntext, avec NULL comme valeur par défaut.[ @force_invalidate_snapshot = ] force_invalidate_snapshot
Accepte que l'action exécutée par cette procédure stockée puisse invalider une capture instantanée existante. force_invalidate_snapshot est de type bit, avec 0 comme valeur par défaut.0 indique que les modifications apportées à l'article n'invalident pas la capture instantanée. Si la procédure stockée détecte que la modification nécessite une nouvelle capture instantanée, une erreur se produit et aucune modification n'est effectuée.
1 indique que les modifications apportées à l'article de fusion peuvent entraîner l'invalidation de la capture instantanée. En outre, s'il existe déjà des abonnements nécessitant une nouvelle capture instantanée, cette valeur permet de marquer la capture instantanée existante comme obsolète et d'en générer une nouvelle.
[ @force_reinit_subscription = ] force_reinit_subscription
Accepte que l'action exécutée par cette procédure stockée puisse nécessiter la réinitialisation des abonnements existants. force_reinit_subscription est de type bit, avec 0 comme valeur par défaut.0 indique 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 nécessite la réinitialisation des abonnements, une erreur se produit et aucune modification n'est effectuée.
1 indique que les modifications apportées à l'article entraînent la réinitialisation des abonnements existants et autorise cette réinitialisation.
[ @publisher= ] 'publisher'
Spécifie un serveur de publication non-Microsoft SQL Server. publisher est de type sysname, avec NULL comme valeur par défaut.Notes
L'argument publisher ne doit pas être utilisé avec un serveur de publication SQL Server.
Valeurs des codes renvoyés
0 (succès) ou 1 (échec)
Notes
La procédure sp_article_filter est utilisée dans une réplication transactionnelle et une réplication de capture instantanée.
L'exécution de la procédure sp_articlefilter pour un article lié à des abonnements existants nécessite la réinitialisatiuon de ceux-ci.
sp_articlefilter crée le filtre et insère l'ID de la procédure stockée de filtre dans la colonne filter de la table sysarticles (Transact-SQL) ; elle insère également le texte de la clause de restriction dans la colonne filter_clause.
Pour créer un article présentant un filtre horizontal, exécutez sp_addarticle (Transact-SQL) sans paramètre filter. Exécutez sp_articlefilter en spécifiant tous les paramètres, y compris filter_clause, puis exécutez sp_articleview (Transact-SQL) en spécifiant tous les paramètres, y compris le même filter_clause. Si le filtre existe déjà et que le type dans sysarticles est 1 (article basé sur le journal), le filtre précédent est supprimé et un nouveau filtre créé.
Si les paramètres filter_name et filter_clause ne sont pas fournis, le filtre précédent est supprimé et l'ID du filtre prend la valeur 0.
Exemple
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 du rôle de base de données fixe db_owner sont habilités à exécuter sp_articlefilter.
Voir aussi