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
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.
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
- Ejecute sp_addmergearticle para definir un artículo, especificando el valor MicrosoftSQL Server Stored Procedure Resolver para el parámetro @article_resolver y el nombre del procedimiento almacenado que implementa la lógica del solucionador de conflictos para el parámetro @resolver_info. Para obtener más información, vea Cómo definir un artículo (programación de la replicación con Transact-SQL).
Para utilizar una resolución de conflictos personalizada con un artículo de tabla existente
Ejecute sp_changemergearticle, especificando @publication, @article, el valor article_resolver para @property y el valor MicrosoftSQL Server Stored ProcedureResolver para @value.
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.