sp_articleview (Transact-SQL)

Crée la vue qui définit l'article publié lorsqu'une table est filtrée verticalement ou horizontalement. Cette vue est utilisée comme source filtrée du schéma et des données des tables de destination. Seuls les articles ne faisant pas l'objet d'un abonnement peuvent être modifiés par cette procédure stockée. Cette procédure stockée est exécutée sur le serveur de publication dans la base de données de publication.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

sp_articleview [ @publication = ] 'publication'
        , [ @article = ] 'article'
    [ , [ @view_name = ] 'view_name']
    [ , [ @filter_clause = ] 'filter_clause']
    [ , [ @change_active = ] change_active ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] 'publisher' ]
    [ , [ @refreshsynctranprocs = ] refreshsynctranprocs ]
    [ , [ @internal = ] internal ]

Arguments

  • [ @publication=] 'publication'
    Nom de la publication qui contient l'article. L'argument publication est de type sysname et n'a pas de valeur par défaut.

  • [ @article= ] 'article'
    Nom de l'article. L'argument article est de type sysname et n'a pas de valeur par défaut.

  • [ @view_name=] 'view_name'
    Nom de la vue qui définit l'article publié. view_name est de type nvarchar(386), avec NULL comme valeur par défaut.

  • [ @filter_clause=] 'filter_clause'
    Clause de restriction (WHERE) qui définit un filtre horizontal. Quand vous entrez la clause de restriction, omettez le mot clé WHERE. L'argument filter_clause est de type ntext et sa valeur par défaut est NULL.

  • [ @change_active = ] change_active
    Autorise la modification des colonnes dans les publications possédant des abonnements. L'argument change_active est de type int, avec 0 comme valeur par défaut. Si la valeur est 0, les colonnes ne sont pas modifiées. Si la valeur est 1, des vues peuvent être créées ou recréées sur des articles actifs possédant des abonnements.

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    Accepte que l'action exécutée par la procédure stockée puisse invalider une capture instantanée existante. force_invalidate_snapshot est de type bit, avec la valeur par défaut 0.

    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 requiert 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 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 de générer une nouvelle capture instantané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. L'argument force_reinit_subscription est de type bit, avec 0 comme valeur par défaut.

    0 indique que les modifications apportées à l'article ne réinitialisent pas l'abonnement. 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 indique que les modifications apportées à l'article entraînent la réinitialisation de l'abonnement existant et autorise la réinitialisation des abonnements.

  • [ @publisher= ] 'publisher'
    Spécifie un serveur de publication non-Microsoft SQL Server. publisher est de type sysname. Sa valeur par défaut est NULL.

    Notes

    publisher ne doit pas être utilisé lors de la publication à partir d'un serveur publication SQL Server.

  • [ @refreshsynctranprocs = ] refreshsynctranprocs
    Indique si les procédures stockées utilisées pour synchroniser la réplication sont automatiquement recréées. refreshsynctranprocs est de type bit, avec 1 comme valeur par défaut.

    1 signifie que les procédures stockées sont recréées.

    0 signifie que les procédures stockées ne sont pas recréées.

  • [ @internal= ] internal
    Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.

Valeurs des codes de retour

0 (succès) ou 1 (échec)

Notes

sp_articleview crée la vue qui définit l'article publié et insère l'ID de cette vue dans la colonne sync_objid de la table sysarticles (Transact-SQL), puis insère le texte de la clause de restriction dans la colonne filter_clause. Si toutes les colonnes sont répliquées et que le paramètre filter_clause n'est pas spécifié, la colonne sync_objid de la table sysarticles (Transact-SQL) prend l'ID de la table de base, auquel cas il n'est pas nécessaire d'utiliser sp_articleview.

Pour publier une table filtrée verticalement (c'est-à-dire pour filtrer des colonnes), exécutez d'abord sp_addarticle sans le paramètre sync_object, puis sp_articlecolumn (Transact-SQL) une fois pour chaque colonne à répliquer (définition du filtre vertical), et enfin sp_articleview pour créer la vue qui définit l'article publié.

Pour publier une table filtrée horizontalement (c'est-à-dire pour filtrer des lignes), exécutez sp_addarticle (Transact-SQL) sans le paramètre filter. Exécutez sp_articlefilter (Transact-SQL) en fournissant tous les paramètres y compris filter_clause. Ensuite, exécutez sp_articleview en fournissant tous les paramètres y compris ce même filter_clause.

Pour publier une table filtrée verticalement et horizontalement, exécutez sp_addarticle (Transact-SQL) sans les paramètres sync_object ou filter. Exécutez sp_articlecolumn (Transact-SQL) une fois pour chaque colonne à répliquer puis exécutez sp_articlefilter (Transact-SQL) et sp_articleview.

Si l'article a déjà une vue qui définit l'article publié, sp_articleview supprime la vue existante et en crée une nouvelle automatiquement. Si la vue a été créée manuellement (type égal à 5 dans sysarticles (Transact-SQL)), la vue existante n'est pas supprimée.

Si vous créez manuellement une procédure stockée de filtre personnalisé et une vue qui définit l'article publié, n'exécutez pas sp_articleview. Définissez-les plutôt comme paramètres filter et sync_object de sp_addarticle (Transact-SQL), avec la valeur type appropriée.

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 peuvent exécuter la procédure sp_articleview.