Partager via


Procédure : implémenter un outil personnalisé de résolution des conflits s'appuyant sur des procédures stockées pour un article de fusion (programmation Transact-SQL de la réplication)

Vous pouvez écrire votre propre outil personnalisé de résolution des conflits sous forme de procédure stockée Transact-SQL au niveau de chaque serveur de publication. Au cours de la synchronisation, cette procédure stockée est appelée en cas de conflits dans un article pour lequel ce programme de résolution a été enregistré, et les informations sur la ligne en conflit sont passées par l'Agent de fusion aux paramètres requis de la procédure. Les outils personnalisés de résolution des conflits s'appuyant sur des procédures stockées sont toujours créés au niveau du serveur de publication.

[!REMARQUE]

Les programmes de résolution s'appuyant sur des procédures stockées MicrosoftSQL Server sont appelés uniquement pour gérer les conflits de changement de ligne. Ils ne peuvent pas être utilisés pour gérer d'autres types de conflits, comme les échecs d'insertion en raison de violations de clés primaires ou de violations de contraintes d'index unique.

Pour créer un outil personnalisé de résolution des conflits s'appuyant sur des procédures stockées

  1. Dans la base de données de publication ou la base de données msdb sur le serveur de publication, créez une procédure stockée système qui implémente les paramètres requis suivants :

    Paramètre

    Type de données

    Description

    @tableowner

    sysname

    Nom du propriétaire de la table pour laquelle un conflit est résolu. Il s'agit du propriétaire de la table dans la base de données de publication.

    @tablename

    sysname

    Nom de la table pour laquelle un conflit est résolu.

    @rowguid

    uniqueidentifier

    Identificateur unique de la ligne en conflit.

    @subscriber

    sysname

    Nom du serveur depuis lequel une modification en conflit est propagée.

    @subscriber_db

    sysname

    Nom de la base de données depuis laquelle la modification en conflit est propagée.

    @log_conflict OUTPUT

    int

    Indique si le processus de fusion doit enregistrer un conflit en vue de le résoudre ultérieurement :

    0 = ne pas enregistrer le conflit.

    1 = l'Abonné est le perdant du conflit.

    2 = le serveur de publication est le perdant du conflit.

    @conflict_message OUTPUT

    nvarchar(512)

    Message accompagnant la résolution si le conflit est enregistré.

    @destowner

    sysname

    Propriétaire de la table publiée créée sur l'Abonné.

    Cette procédure stockée utilise les valeurs passées par l'Agent de fusion à ces paramètres pour implémenter votre logique de résolution des conflits personnalisée. Elle doit retourner un jeu de résultats d'une seule ligne dont la structure est identique à la table de base et qui contient les valeurs de données pour la version gagnante de la ligne.

  2. Accordez les autorisations EXECUTE sur la procédure stockée à toutes connexions utilisées par les Abonnés pour se connecter au serveur de publication.

Pour utiliser un outil personnalisé de résolution des conflits avec un nouvel article de table

Pour utiliser un outil personnalisé de résolution des conflits avec un article de table existant

  1. Exécutez sp_changemergearticle, en spécifiant @publication, @article, en affectant la valeur article_resolver à @property et la valeur MicrosoftSQL Server Stored ProcedureResolver à @value.

  2. Exécutez sp_changemergearticle, en spécifiant @publication, @article, en affectant la valeur resolver_info à @property et en spécifiant le nom de la procédure stockée qui implémente la logique de l'outil de résolution des conflits pour @value.