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 MicrosoftSQL 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.