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_options 3 , 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 0x800000000 associé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 0x100000000 associé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. threshold contrô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
.