Partager via


sp_changemergearticle (Transact-SQL)

S'applique à : SQL Server

Modifie les propriétés d'un article de fusion. 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_changemergearticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]

Arguments

[ @publication = ] N’publication'

Nom de la publication dans laquelle l’article existe. @publication est sysname, sans valeur par défaut.

[ @article = ] N’article'

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

[ @property = ] N’property'

Propriété à modifier pour l’article et la publication donnés. @property est sysname et peut être l’une des valeurs répertoriées dans le tableau suivant.

[ @value = ] N’value'

Nouvelle valeur de la propriété spécifiée. @value est nvarchar(2000) et peut être l’une des valeurs répertoriées dans le tableau suivant.

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

Propriété Valeurs Description
allow_interactive_resolver true Permet d'utiliser un outil de résolution interactif pour l'article.
false Désactive l'utilisation d'un outil de résolution interactif pour l'article.
article_resolver Outil de résolution personnalisé pour l'article S’applique uniquement à un article de table.
check_permissions (bitmap) 0x00 Les autorisations au niveau de la table ne sont pas vérifiées.
0x10 Les autorisations au niveau de la table sont vérifiées dans le serveur de publication avant que les instructions INSERT effectuées sur l'Abonné ne soient appliquées dans le serveur de publication.
0x20 Les autorisations au niveau de la table sont vérifiées dans le serveur de publication avant que les instructions UPDATE effectuées sur l'Abonné ne soient appliquées dans le serveur de publication.
0x40 Les autorisations au niveau de la table sont vérifiées sur le serveur de publication avant que les instructions DELETE effectuées sur l'Abonné ne soient appliquées dans le serveur de publication.
column_tracking true Active le suivi au niveau de la colonne. S’applique uniquement à un article de table.

Remarque : Le suivi au niveau des colonnes ne peut pas être utilisé lors de la publication de tables avec plus de 246 colonnes.
false Désactive le suivi au niveau de la colonne et conserve la détection des conflits au niveau de la ligne. S’applique uniquement à un article de table.
compensate_for_errors true Des actions de compensation sont effectuées lorsque des erreurs se produisent au cours de la synchronisation. Pour plus d’informations, consultez sp_addmergearticle.
false Les actions de compensation ne sont pas effectuées, ce qui est le comportement par défaut. Pour plus d’informations, consultez sp_addmergearticle.

Important : bien que les données des lignes affectées semblent être hors de convergence, dès que vous résolvez les erreurs, les modifications peuvent être appliquées et les données convergent. Si la table source d’un article est déjà publiée dans une autre publication, la valeur de compensate_for_errors doit être la même pour les deux articles.
creation_script Chemin d'accès et nom d'un script de schéma d'article facultatif utilisé pour créer l'article dans la base de données d'abonnement.
delete_tracking true Les instructions DELETE sont répliquées, ce qui est le comportement par défaut.
false Les instructions DELETE ne sont pas répliquées.

Important : la définition delete_tracking de résultats false dans la non-convergence et les lignes supprimées doivent être supprimées manuellement.
description Entrée descriptive de l'article
destination_owner Nom du propriétaire de l’objet dans la base de données d’abonnement, sinon dbo.
identity_range bigint qui spécifie la taille de plage à utiliser lors de l’attribution de nouvelles valeurs d’identité si l’article a identityrangemanagementoption défini ou auto_identity_range défini auto sur true. S'applique à un article de table uniquement. Pour plus d’informations, consultez la section « Réplication de fusion » de La réplication des colonnes d’identité.
identityrangemanagementoption manual Désactive la gestion automatique des plages d'identité. Marque les colonnes d'identité en utilisant NOT FOR REPLICATION pour permettre la gestion manuelle des plages d'identité. Pour plus d’informations, consultez Répliquer des colonnes d’identité.
none Désactive toute la gestion des plages d'identité.
logical_record_level_conflict_detection true Un conflit est détecté si des modifications sont apportées à un point quelconque de l'enregistrement logique. Exige que logical_record_level_conflict_resolution soit défini sur true.
false La détection de conflit par défaut est utilisée comme spécifié par column_tracking.
logical_record_level_conflict_resolution true L'enregistrement logique gagnant complet remplace l'enregistrement logique perdant.
false Les lignes gagnantes ne sont pas limitées à l’enregistrement logique.
partition_options 0 Le filtrage de l’article est statique ou ne génère pas de sous-ensemble unique de données pour chaque partition, c’est-à-dire une partition « qui se chevauche ».
1 Les partitions se chevauchent et les mises à jour DML effectuées sur l’Abonné ne peuvent pas modifier la partition à laquelle appartient une ligne.
2 Le filtrage de l'article produit des partitions qui ne se chevauchent pas, mais plusieurs abonnés peuvent recevoir la même partition.
3 Le filtrage de l'article produit des partitions qui ne se chevauchent pas et qui sont uniques pour chaque abonnement.

Remarque : Si vous spécifiez une valeur pour partition_options3 , il ne peut y avoir qu’un seul abonnement pour chaque partition de données de cet article. Si un deuxième abonnement est créé, dans lequel le critère de filtrage du nouvel abonnement est résolu sur la même partition que l’abonnement existant, l’abonnement existant est supprimé.
pre_creation_command none Si la table existe déjà côté abonné, aucune action n'est effectuée.
delete Entraîne une suppression basée sur la clause WHERE dans le filtre de sous-ensemble.
drop Supprime la table avant de la recréer.
truncate Tronque la table de destination.
processing_order int qui indique l’ordre de traitement des articles dans une publication de fusion.
pub_identity_range bigint qui spécifie la taille de plage allouée à un Abonné avec un abonnement serveur si l’article a identityrangemanagementoption défini ou auto_identity_range défini auto sur true. Cette plage d'identité est réservée à un Abonné de republication qui peut l'allouer à ses propres Abonnés. S'applique à un article de table uniquement. Pour plus d’informations, consultez la section « Réplication de fusion » de La réplication des colonnes d’identité.
published_in_tran_pub true L'article est également publié dans une publication transactionnelle.
false L’article n’est pas également publié dans une publication transactionnelle.
resolver_info Permet de définir les informations supplémentaires requises par un outil de résolution personnalisé. Certains résolveurs Microsoft nécessitent une colonne fournie en tant qu’entrée au programme de résolution. resolver_info est nvarchar(255), avec la valeur par défaut NULL. Pour plus d’informations, consultez Conflit de réplication de fusion avancée - Programme de résolution COM.
schema_option (bitmap) Pour plus d’informations, consultez la section Remarques.
0x00 Désactive le script par l’Agent d’instantané et utilise le script fourni dans creation_script.
0x01 Génère le script de création d'objet (CREATE TABLE, CREATE PROCEDURE, etc.).
0x10 Génère un index cluster correspondant.
0x20 Convertit les types de données définis par l'utilisateur en types de données de base auprès de l'Abonné. Cette option ne peut pas être utilisée lorsqu’il existe une contrainte CHECK ou DEFAULT sur une colonne de type défini par l’utilisateur (UDT), si une colonne UDT fait partie de la clé primaire ou si une colonne calculée fait référence à une colonne UDT.
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 contraintes FOREIGN KEY 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 Génère des instructions ALTER TABLE lors de la création d'un script de contraintes.
0x10000 Réplique les contraintes CHECK comme NOT FOR REPLICATION afin que les contraintes ne soient pas appliquées pendant la synchronisation.
0x20000 Réplique les contraintes FOREIGN KEY comme NOT FOR REPLICATION afin 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 Réplique les liaisons par défaut
0x800000 Réplique des liaisons de règle.
0x1000000 Réplique l'index de 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) 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) en varbinary(max) afin que les colonnes de type UDT puissent être répliquées vers des 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.
NULL Le système génère automatiquement une option de schéma valide pour l’article.
status active Exécution du script de traitement initial pour publier la table.
unsynced Le script de traitement initial servant à publier la table sera exécuté lors de la prochaine exécution de l'Agent d'instantané.
stream_blob_columns true Une optimisation de flux de données est utilisée lors de la réplication de colonnes d'objets binaires volumineux (BLOB). Toutefois, certaines fonctionnalités de réplication de fusion, telles que les enregistrements logiques, peuvent tout de même empêcher d'utiliser l'optimisation de flux. stream_blob_columns a la valeur true lorsque FILESTREAM est activé. Cela permet la réplication des données FILESTREAM dans le but d'optimiser et de réduire l'utilisation de la mémoire. Pour forcer les articles de table FILESTREAM à ne pas utiliser la diffusion en continu d’objets blob, définissez sur stream_blob_columns false.

Important : L’activation de cette optimisation de la mémoire peut nuire aux performances de la Agent de fusion pendant la synchronisation. Cette option ne doit être utilisée que lors de la réplication de colonnes contenant des mégaoctets de données.
false L’optimisation n’est pas utilisée lors de la réplication de colonnes d’objets volumineux binaires.
subscriber_upload_options 0 Aucune restriction sur les mises à jour effectuées sur un Abonné disposant d'un abonnement client ; les modifications sont téléchargées sur le serveur de publication. La modification de cette propriété peut nécessiter la réinitialisation des Abonnés existants.
1 Les modifications sont autorisées sur un Abonné avec un abonnement client, mais elles ne sont pas chargées sur le serveur de publication.
2 Les modifications ne sont pas autorisées sur un Abonné avec un abonnement client.
subset_filterclause Clause WHERE spécifiant le filtrage horizontal. S’applique uniquement à un article de table.

Important : pour des raisons de performances, nous vous recommandons de ne pas appliquer de fonctions aux noms de colonnes dans les clauses de filtre de lignes paramétrables, telles que LEFT([MyColumn]) = SUSER_SNAME(). Si vous utilisez HOST_NAME dans une clause de filtre et remplacez la valeur HOST_NAME, vous devrez peut-être convertir des types de données à l’aide de CONVERT. Pour plus d’informations sur les meilleures pratiques pour ce cas, consultez la section « Substitution de la valeur HOST_NAME() » dans les filtres paramétrables - Filtres de lignes paramétrables.
threshold Valeur de pourcentage utilisée pour les Abonnés exécutant SQL Server Compact ou les versions antérieures de SQL Server. thresholdcontrôle quand le Agent de fusion affecte une nouvelle plage d’identités. Lorsque le pourcentage de valeurs spécifié dans le seuil est utilisé, l'Agent de fusion crée une nouvelle plage d'identité. Utilisé quand identityrangemanagementoption est défini auto sur ou auto_identity_range défini sur true. S'applique à un article de table uniquement. Pour plus d’informations, consultez la section « Réplication de fusion » de La réplication des colonnes d’identité.
verify_resolver_signature 1 La signature numérique sur un programme de résolution personnalisé est vérifiée pour déterminer si elle provient d’une source approuvée.
0 La signature numérique sur un programme de résolution personnalisé n’est pas vérifiée pour déterminer si elle provient d’une source approuvée.
NULL (valeur par défaut) Retourne la liste des valeurs prises en charge pour @property.

[ @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 de fusion 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 signifie que les modifications apportées à l’article de fusion peuvent entraîner l’échec de l’instantané 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 de fusion n’entraînent pas la réinitialisation de l’abonnement. Si la procédure stockée détecte que la modification nécessite la réinitialisation des abonnements existants, une erreur se produit et aucune modification n'est effectuée.

  • 1 signifie que les modifications apportées à l’article de fusion 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.

Valeurs des codes de retour

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

Notes

sp_changemergearticle est utilisé dans la réplication de fusion.

Étant donné qu’il sp_changemergearticle est utilisé pour modifier les propriétés d’article qui ont été initialement spécifiées à l’aide de sp_addmergearticle, reportez-vous à sp_addmergearticle pour plus d’informations sur ces propriétés.

La modification 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 :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • schema_options
  • subset_filterclause

La modification 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 :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • identityrangemanagementoption
  • subscriber_upload_options
  • subset_filterclause
  • creation_script
  • schema_option
  • logical_record_level_conflict_detection
  • logical_record_level_conflict_resolution

Lorsque vous spécifiez une valeur pour 3 partition_options, les métadonnées sont nettoyées chaque fois que le Agent de fusion s’exécute et que l’instantané partitionné expire plus rapidement. Lorsque vous utilisez cette option, pensez à activer l'instantané partitionné requis par l'abonné. Pour plus d'informations, voir Créer un instantané d’une publication de fusion avec des filtres paramétrés.

Lorsque vous définissez la column_tracking propriété, si la table est déjà publiée dans d’autres publications de fusion, le suivi des colonnes doit être identique à la valeur utilisée par les articles existants en fonction de cette table. Ce paramètre concerne uniquement les articles de table.

Si plusieurs publications publient des articles basés sur la même table sous-jacente, la modification de la delete_tracking propriété ou de la compensate_for_errors propriété d’un article entraîne la même modification apportée aux autres articles basés sur la même table.

Si le compte de connexion/d’utilisateur du serveur de publication utilisé par le processus de fusion ne dispose pas des autorisations de table appropriées, les modifications non valides sont enregistrées en tant que conflits.

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_changemergearticle, les paramètres de bits existants peuvent être désactivés. Pour conserver les paramètres existants, vous devez effectuer & (Bitwise AND) entre la valeur que vous définissez et la valeur actuelle de schema_option, qui peut être déterminée en exécutant sp_helpmergearticle.

Attention

Lorsque vous avez plusieurs (peut-être des centaines) d’articles dans une publication et que vous exécutez sp_changemergearticle pour l’un des articles, il peut prendre beaucoup de temps pour terminer l’exécution.

Table d’options de schéma valide

Le tableau suivant décrit les valeurs autorisées schema_option , en fonction du type d’article.

Type de l'article Valeurs de l'option de schéma
func schema only 0x01 et 0x2000
indexed view schema only 0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x1000000 et 0x200000
proc schema only 0x01 et 0x2000
table Toutes les options.
view schema only 0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x1000000 et 0x200000

Exemples

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 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_changemergearticle.