Cláusula MERGE

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:24 PM por David Miralpeix

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.

<< Artículo anterior                                                                                                                                       Siguiente artículo >>

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo