Cómo implementar una resolución de conflictos personalizada basada en procedimiento almacenado para un artículo de mezcla (programación de la replicación con Transact-SQL)

Puede escribir su propia resolución de conflictos personalizada como un procedimiento almacenado Transact-SQL en cada publicador. Durante la sincronización, se llama a este procedimiento almacenado cuando se encuentran conflictos en un artículo para el que se registró la resolución y el Agente de mezcla pasa información sobre la fila del conflicto a los parámetros pertinentes del procedimiento. Las resoluciones de conflictos personalizadas basadas en el procedimiento almacenado siempre se crean en el publicador.

Nota

Los solucionadores de procedimiento almacenado Microsoft SQL Server sólo se invocan para resolver conflictos debidos a cambios de filas. No se pueden utilizar para solucionar otros tipos de conflictos como errores de inserción debidos a infracciones de CLAVE PRINCIPAL o a infracciones de restricción de índice único.

Para crear una resolución de conflictos personalizada basada en un procedimiento almacenado

  1. En el publicador, ya sea en la publicación o en la base de datos msdb, cree un nuevo procedimiento almacenado del sistema que implemente los parámetros necesarios siguientes:

    Parámetro

    Tipo de datos

    Descripción

    @tableowner

    sysname

    Nombre del propietario de la tabla en la que se resuelve un conflicto. Éste es el propietario de la tabla de la base de datos de publicación.

    @tablename

    sysname

    Nombre de la tabla en la que se resuelve un conflicto.

    @rowguid

    uniqueidentifier

    Identificador único de la fila que tiene el conflicto.

    @subscriber

    sysname

    Nombre del servidor desde donde se propaga un cambio conflictivo.

    @subscriber_db

    sysname

    Nombre de la base de datos desde donde se propaga un cambio conflictivo.

    @log_conflict OUTPUT

    int

    Si el proceso de mezcla debería registrar un conflicto para su posterior resolución:

    0 = No registre el conflicto.

    1 = El suscriptor es el perdedor del conflicto.

    2 = El publicador es el perdedor del conflicto.

    @conflict_message OUTPUT

    nvarchar(512)

    Mensaje que se va a proporcionar sobre la resolución si se registra el conflicto.

    @destowner

    sysname

    El propietario de la tabla publicada en el suscriptor.

    Este procedimiento almacenado utiliza los valores que pasa el Agente de mezcla a estos parámetros para implementar su lógica de resolución de conflictos personalizada; debe devolver un conjunto de resultados de filas único que sea idéntico en estructura a la tabla base y contenga los valores de datos de la versión ganadora de la fila.

  2. Conceda permisos EXECUTE para el procedimiento almacenado a todos los inicios de sesión utilizados por los suscriptores para conectarse al publicador.

Para utilizar una resolución de conflictos personalizada con un nuevo artículo de tabla

Para utilizar una resolución de conflictos personalizada con un artículo de tabla existente

  1. Ejecute sp_changemergearticle, especificando @publication, @article, el valor article_resolver para @property y el valor MicrosoftSQL Server Stored ProcedureResolver para @value.

  2. Ejecute sp_changemergearticle, especificando @publication, @article, el valor resolver_info para @property y el nombre del procedimiento almacenado que implementa la lógica de la resolución de conflictos para @value.