Esta cláusula sirve para ejecutar operaciones de inserción, actualización o eliminación en un solo paso, según los resultados de una combinación con una tabla de origen. Es más eficiente que hacer operaciones separadas.
MERGE Empleados_Datos AS T
USING (
SELECT 0 IdEmpleado, 'Pablo' Nombre , 'Pablo' [login]
UNION
SELECT -1 IdEmpleado, 'Ana' Nombre , 'Ana' [login]
UNION
SELECT -2 IdEmpleado, 'Jose' Nombre , 'Jose' [login]
) AS S
ON (T.IdEmpleado = S.IdEmpleado)
-- insertar si no existe en el destino
WHEN NOT MATCHED BY TARGET
THEN INSERT(IdEmpleado, Nombre) VALUES (S.IdEmpleado,S.Nombre)
-- modificar si existe en el destino
WHEN MATCHED
THEN UPDATE SET T.Nombre = S.Nombre
-- si no existe en el origen borrar
WHEN NOT MATCHED BY SOURCE
THEN DELETE
;
Editar el trigger Fianzas_Cli_DTrig para ver un ejemplo de MERGE y como sustituye a un cursor.
Ejemplo de cláusula MREGE combinada con cláusula OUTPUT:
BEGIN TRAN
Declare @Tab_Result TABLE (IdDoc int, IdDelegacion int, Nombre_Anterior varchar(1000), Nombre_Nuevo varchar(1000))
MERGE Delegaciones AS T
USING ( VALUES (900,'Delegacion_900'),(901,'Delegacion_901'),(902,'Delegacion_902'),(0,'DELEGACION_0')
) AS S (IdDelegacion,Nombre)
ON (T.IdDelegacion = S.IdDelegacion)
-- insertar si no existe en el destino
WHEN NOT MATCHED BY TARGET
THEN INSERT(IdDelegacion, Nombre) VALUES (S.IdDelegacion,S.Nombre)
-- modificar si existe en el destino
WHEN MATCHED
THEN UPDATE SET T.Nombre = S.Nombre
-- si no existe en el origen borrar
WHEN NOT MATCHED BY SOURCE AND T.IdDelegacion>=900
THEN DELETE
OUTPUT inserted.iddoc, deleted.IdDelegacion, deleted.nombre, S.Nombre INTO @Tab_Result
;
select * from @Tab_Result
select * from Delegaciones
ROLLBACK TRAN
Con esta consulta añadimos delegaciones y modificamos el nombre de la delegación 0 si existe. Además, también podemos ver en la tabla @Tab_Result, los datos eliminados y borrados y también datos del origen (source) utilizados para el MERGE.
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo