Partager via


sp_changearticle (Transact-SQL)

S’applique à : SQL Server Azure SQL Managed Instance

Modifie les propriétés d'un article dans une publication transactionnelle ou d'instantané. 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_changearticle
    [ [ @publication = ] N'publication' ]
    [ , [ @article = ] N'article' ]
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @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, avec la valeur par défaut NULL.

[ @article = ] N’article'

Nom de l’article dont la propriété doit être modifiée. @article est sysname, avec la valeur par défaut NULL.

[ @property = ] N’property'

Propriété d’article à modifier. @property est nvarchar(100), avec la valeur par défaut NULL.

[ @value = ] N’value'

Nouvelle valeur de la propriété d’article. @value est nvarchar(255), avec la valeur par défaut NULL.

Le tableau ci-dessous décrit les propriétés des articles et les valeurs de ces propriétés.

Propriété Valeurs Description
creation_script Chemin d'accès et nom d'un script de schéma d'article utilisé pour créer des tables cibles. Par défaut, il s’agit de NULL.
del_cmd DELETE instruction à exécuter ; sinon, elle est construite à partir du journal.
description Nouvelle entrée descriptive de l'article.
dest_object Fourni pour la compatibilité ascendante. Utiliser dest_table.
dest_table Nouvelle table de destination.
destination_owner Nom du propriétaire de l’objet de destination.
filter Nouvelle procédure stockée à utiliser pour filtrer la table (filtrage horizontal). Par défaut, il s’agit de NULL. Impossible de modifier les publications dans la réplication d’égal à égal.
fire_triggers_on_snapshot true Les déclencheurs de l'utilisateur répliqués sont exécutés lorsque l'instantané initial est appliqué.

Remarque : Pour que les déclencheurs soient répliqués, la valeur du masque de bits de schema_option doit inclure la valeur 0x100.
false Les déclencheurs utilisateur répliqués ne sont pas exécutés lorsque l’instantané initial est appliqué.
identity_range Contrôle la taille des plages d'identité affectées à l'abonné. Non pris en charge pour la réplication d'égal à égal.
ins_cmd INSERT instruction à exécuter ; sinon, elle est construite à partir du journal.
pre_creation_cmd Commande de précréation qui peut supprimer, supprimer ou tronquer la table de destination avant l’application de la synchronisation.
none N’utilise pas de commande.
drop Supprime la table de destination.
delete Détruit la table de destination.
truncate Tronque la table de destination.
pub_identity_range Contrôle la taille des plages d'identité affectées à l'abonné. Non pris en charge pour la réplication d'égal à égal.
schema_option Spécifie le bitmap de l'option de génération de schéma pour l'article considéré. schema_option est binary(8). Pour plus d’informations, consultez la section Remarques.
0x00 Désactive les scripts de l'Agent d'instantané.
0x01 Génère la création d’objets (CREATE TABLE, CREATE PROCEDUREetc.).
0x02 Génère les procédures stockées qui propagent les modifications pour l'article, si elles sont définies.
0x04 Les colonnes d’identité sont scriptées à l’aide de la IDENTITY propriété.
0x08 Répliquer des colonnes d’horodatage . Si ce n’est pas le cas, les colonnes d’horodatage sont répliquées en tant que binaires.
0x10 Génère un index cluster correspondant.
0x20 Convertit les types de données définis par l'utilisateur (UDT) en types de données de base auprès de l'Abonné. Cette option ne peut pas être utilisée lorsqu’il existe une CHECK ou DEFAULT une contrainte sur une colonne UDT, si une colonne UDT fait partie de la clé primaire ou si une colonne calculée fait référence à une colonne UDT. Non pris en charge pour les serveurs de publication Oracle.
0x40 Génère les index non-cluster correspondants.
0x80 Inclut l'intégrité référentielle déclarée dans les clés primaires.
0x100 Réplique les déclencheurs utilisateur, si ceux-ci sont définis, sur un article de table.
0x200 Réplique les contraintes FOREIGN KEY . Si la table référencée ne fait pas partie d’une publication, toutes les FOREIGN KEY contraintes sur une table publiée ne sont pas répliquées.
0x400 Réplique les contraintes CHECK .
0x800 Réplique les valeurs par défaut.
0x1000 Réplique le classement au niveau des colonnes.
0x2000 Réplique les propriétés étendues associées à l'objet source de l'article publié.
0x4000 Réplique les clés uniques, si celles-ci sont définies, sur un article de table.
0x8000 Réplique la clé primaire et les clés uniques d’un article de table en tant que contraintes à l’aide ALTER TABLE d’instructions.

Remarque : cette option est déconseillée. Utilisez plutôt 0x80 et 0x4000.
0x10000 Réplique les contraintes CHECK de NOT FOR REPLICATION sorte que les contraintes ne soient pas appliquées pendant la synchronisation.
0x20000 Réplique les contraintes FOREIGN KEY de NOT FOR REPLICATION sorte que les contraintes ne soient pas appliquées pendant la synchronisation.
0x40000 Réplique les groupes de fichiers associés à une table ou un index partitionné.
0x80000 Réplique le schéma de partition d'une table partitionnée.
0x100000 Réplique le schéma de partition d'un index partitionné.
0x200000 Réplique les statistiques d'une table.
0x400000 Liaisons par défaut.
0x800000 Liaisons de règles.
0x1000000 Index de recherche en texte intégral.
0x2000000 Les collections de schémas XML liées aux colonnes XML ne sont pas répliquées.
0x4000000 Réplique les index sur les colonnes xml .
0x8000000 Crée tout schéma non encore présent chez l'abonné.
0x10000000 Convertit les colonnes xml en ntext sur l’Abonné.
0x20000000 Convertit les types de données d’objet volumineux (nvarchar(max), varchar(max)et varbinary(max)) introduits dans SQL Server 2005 (9.x) en types de données pris en charge sur SQL Server 2000 (8.x).
0x40000000 Réplique les autorisations.
0x80000000 Tentez de supprimer des dépendances vers des objets qui ne font pas partie de la composition.
0x100000000 Utilisez cette option pour répliquer l’attribut FILESTREAM s’il est spécifié sur les colonnes varbinary(max). Ne spécifiez pas cette option si vous répliquez des tables vers des abonnés SQL Server 2005 (9.x). La réplication de tables qui ont des colonnes FILESTREAM vers des abonnés SQL Server 2000 (8.x) n’est pas prise en charge, quelle que soit la façon dont cette option de schéma est définie.

Voir l’option 0x800000000associée .
0x200000000 Convertit les types de données date et heure (date, heure, datetimeoffset et datetime2) qui ont été introduits dans SQL Server 2008 (10.0.x) en types de données pris en charge sur les versions antérieures de SQL Server.
0x400000000 Réplique l'option de compression pour les données et les index. Pour plus d’informations, consultez Compression de données.
0x800000000 Définissez cette option pour stocker les données FILESTREAM dans leur propre groupe de fichiers sur l'Abonné. Si cette option n’est pas définie, les données FILESTREAM sont stockées sur le groupe de fichiers par défaut. La réplication ne crée pas de groupes de fichiers ; par conséquent, si vous définissez cette option, vous devez créer le groupe de fichiers avant d’appliquer l’instantané sur l’Abonné. Pour plus d’informations sur la création d’objets avant d’appliquer l’instantané, consultez Exécuter des scripts avant et après l’application de l’instantané.

Voir l’option 0x100000000associée .
0x1000000000 Convertit les types clR (Common Language Runtime) définis par l’utilisateur (UDT) supérieurs à 8 000 octets en varbinary(max) afin que les colonnes de type UDT puissent être répliquées vers les Abonnés exécutant SQL Server 2005 (9.x).
0x2000000000 Convertit le type de données hierarchyid en varbinary(max) afin que les colonnes de type hierarchyid puissent être répliquées vers des Abonnés exécutant SQL Server 2005 (9.x). Pour plus d’informations sur l’utilisation de colonnes hierarchyid dans des tables répliquées, consultez la référence de méthode de type de données hierarchyid.
0x4000000000 Réplique tous les index filtrés sur la table. Pour plus d’informations sur les index filtrés, consultez Créer des index filtrés.
0x8000000000 Convertit les types de données geography et geometry en varbinary(max) afin que les colonnes de ces types puissent être répliquées vers des Abonnés exécutant SQL Server 2005 (9.x).
0x10000000000 Réplique les index sur les colonnes de type geography et geometry.
0x20000000000 Réplique l’attribut SPARSE pour les colonnes. Pour plus d’informations sur cet attribut, consultez Utiliser des colonnes éparses.
0x40000000000 Activez le script par l’agent d’instantané pour créer une table mémoire optimisée sur l’abonné.
0x80000000000 Convertit l’index cluster en index non cluster pour les articles à mémoire optimisée.
status Spécifie le nouvel état de la propriété.
dts horizontal partitions Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.
include column names Les noms de colonnes sont inclus dans l’instruction répliquée INSERT .
no column names Les noms de colonnes ne sont pas inclus dans l’instruction répliquée INSERT .
no dts horizontal partitions La partition horizontale de l’article n’est pas définie par un abonnement transformable.
none Efface toutes les options d’état dans la table sysarticles et marque l’article comme inactif.
parameters Les modifications sont propagées vers l'abonné à l'aide de commandes paramétrables. Il s'agit du paramètre par défaut pour un nouvel article.
string literals Les modifications sont propagées vers l'abonné à l'aide de valeurs littérales de chaîne.
sync_object Nom de la table ou de la vue utilisée pour produire un fichier de sortie de synchronisation. Par défaut, il s’agit de NULL. Non pris en charge pour les serveurs de publication Oracle.
tablespace Identifie l'espace de table utilisé par la table de journalisation pour un article publié à partir d'une base de données Oracle. Pour plus d’informations, consultez Gérer des espaces disque logiques Oracle.
threshold Valeur de pourcentage qui contrôle le moment où l'Agent de distribution affecte une nouvelle plage d'identité. Non pris en charge pour la réplication d'égal à égal.
type Non pris en charge pour les serveurs de publication Oracle.
logbased Article basé sur le journal.
logbased manualboth Article reposant sur un journal, avec filtre manuel et vue manuelle. Cette option nécessite également de définir les propriétés et filter les sync_object propriétés. Non pris en charge pour les serveurs de publication Oracle.
logbased manualfilter Article reposant sur un journal, avec filtre manuel. Cette option nécessite également de définir les propriétés et filter les sync_object propriétés. Non pris en charge pour les serveurs de publication Oracle.
logbased manualview Article reposant sur un journal, avec vue manuelle. Cette option nécessite que vous définissiez également la sync_object propriété. Non pris en charge pour les serveurs de publication Oracle.
indexed viewlogbased Article de vue indexée reposant sur un journal. Non pris en charge pour les serveurs de publication Oracle. Pour ce type d’article, la table de base n’a pas besoin d’être publiée séparément.
indexed viewlogbased manualboth Article de vue indexée reposant sur un journal avec filtre manuel et vue manuelle. Cette option nécessite également de définir les propriétés et filter les sync_object propriétés. Pour ce type d’article, la table de base n’a pas besoin d’être publiée séparément. Non pris en charge pour les serveurs de publication Oracle.
indexed viewlogbased manualfilter Article de vue indexée reposant sur un journal avec filtre manuel. Cette option nécessite également de définir les propriétés et filter les sync_object propriétés. Pour ce type d’article, la table de base n’a pas besoin d’être publiée séparément. Non pris en charge pour les serveurs de publication Oracle.
indexed viewlogbased manualview Article de vue indexée reposant sur un journal avec vue manuelle. Cette option nécessite que vous définissiez également la sync_object propriété. Pour ce type d’article, la table de base n’a pas besoin d’être publiée séparément. Non pris en charge pour les serveurs de publication Oracle.
upd_cmd UPDATE instruction à exécuter ; sinon, elle est construite à partir du journal.
NULL NULL Renvoie une liste de propriétés d'articles modifiables.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

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

0 spécifie que les modifications apportées à l’article n’entraînent pas l’invalidation de l’instantané. 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.

1 spécifie que les modifications apportées à l’article peuvent rendre l’instantané non valide et, s’il existe des abonnements existants qui nécessitent un nouvel instantané, donne l’autorisation de marquer l’instantané existant comme obsolète et un nouvel instantané généré.

Consultez la section Remarques pour les propriétés qui, en cas de modification, nécessitent la génération d’un nouvel instantané.

[ @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 de l’abonnement. Si la procédure stockée détecte que la modification exige que les abonnements existants soient réinitialisés, une erreur se produit et aucune modification n’est apporté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.

Consultez la section Remarques pour les propriétés qui, en cas de modification, nécessitent que tous les abonnements existants soient réinitialisés.

[ @publisher = ] N’publisher'

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

Remarque

l’éditeur ne doit pas être utilisé lors de la modification des propriétés d’article sur un serveur de publication SQL Server.

Valeurs des codes de retour

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

Notes

sp_changearticle est utilisé dans la réplication d’instantanés et la réplication transactionnelle.

Lorsqu’un article appartient à une publication qui prend en charge la réplication transactionnelle d’égal à égal, vous pouvez uniquement modifier les propriétés, ins_cmdet upd_cmddel_cmd les descriptionpropriétés.

La modification de l’une des propriétés suivantes nécessite qu’un nouvel instantané soit généré et que vous devez spécifier une valeur pour 1 le paramètre @force_invalidate_snapshot :

  • del_cmd
  • dest_table
  • destination_owner
  • ins_cmd
  • pre_creation_cmd
  • schema_options
  • upd_cmd

La modification de l’une des propriétés suivantes nécessite que les abonnements existants soient réinitialisés et que vous devez spécifier une valeur pour 1 le paramètre @force_reinit_subscription .

  • del_cmd
  • dest_table
  • destination_owner
  • filter
  • ins_cmd
  • status
  • upd_cmd

Au sein d’une composition existante, vous pouvez utiliser sp_changearticle pour modifier un article sans avoir à supprimer et recréer la composition entière.

Remarque

Lorsque vous modifiez la valeur de schema_option, le système n’effectue pas de mise à jour au niveau du bit. Cela signifie que lorsque vous définissez schema_option l’utilisation sp_changearticle, les paramètres de bits existants peuvent être désactivés. Pour conserver les paramètres existants, vous devez effectuer | (OR au niveau du bit) entre la valeur que vous définissez et la valeur actuelle de schema_option, qui peut être déterminée en exécutant sp_helparticle.

Options de schéma valides

Le tableau suivant décrit les valeurs autorisées d’après le type de schema_option réplication (illustré en haut) et le type d’article (indiqué dans la première colonne).

Type de l'article Type de réplication - Transactionnel Type de réplication - Instantané
logbased Toute les options Toutes les options, mais 0x02
logbased manualfilter Toute les options Toutes les options, mais 0x02
logbased manualview Toute les options Toutes les options, mais 0x02
indexed view logbased Toute les options Toutes les options, mais 0x02
indexed view logbased manualfilter Toute les options Toutes les options, mais 0x02
indexed view logbased manualview Toute les options Toutes les options, mais 0x02
indexed view logbase manualboth Toute les options Toutes les options, mais 0x02
proc exec 0x01, , 0x200x20000000x4000000x8000000x2000, et 0x80000000x100000000x200000000x400000000x80000000 0x01, , 0x200x20000000x4000000x8000000x2000, et 0x80000000x100000000x200000000x400000000x80000000
serializable proc exec 0x01, , 0x200x20000000x4000000x8000000x2000, et 0x80000000x100000000x200000000x400000000x80000000 0x01, , 0x200x20000000x4000000x8000000x2000, et 0x80000000x100000000x200000000x400000000x80000000
proc schema only 0x01, , 0x200x20000000x4000000x8000000x2000, et 0x80000000x100000000x200000000x400000000x80000000 0x01, , 0x200x20000000x4000000x8000000x2000, et 0x80000000x100000000x200000000x400000000x80000000
view schema only 0x01, , 0x010, 0x4000000x2000000x80000000x1000000x20000000x400000x8000000x400000000x0200x0400x01000x20000x80000000 0x01, , 0x010, 0x4000000x2000000x80000000x1000000x20000000x400000x8000000x400000000x0200x0400x01000x20000x80000000
func schema only 0x01, , 0x200x20000000x4000000x8000000x2000, et 0x80000000x100000000x200000000x400000000x80000000 0x01, , 0x200x20000000x4000000x8000000x2000, et 0x80000000x100000000x200000000x400000000x80000000
indexed view schema only 0x01, , 0x010, 0x4000000x2000000x80000000x1000000x20000000x400000x8000000x400000000x0200x0400x01000x20000x80000000 0x01, , 0x010, 0x4000000x2000000x80000000x1000000x20000000x400000x8000000x400000000x0200x0400x01000x20000x80000000

Remarque

Pour les publications mises à jour mises à jour en file d’attente, la schema_option valeur de 0x80 doit être activée. Les valeurs prises en charge schema_option pour les publications non-SQL Server sont les suivantes : 0x01, , 0x020x10, 0x40, , 0x80et 0x1000 0x4000.

Exemples

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));

-- Change the schema options to replicate schema with XML.
USE [AdventureWorks2022]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
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_changearticle.