Merge

Instrucción Merge

Realiza instrucciones de inserción de registros, actualización o eliminación de registros en una tabla de destino en la misma base de datos o en otra base de datos según los resultados de combinar los registros con una tabla de origen. 

Sintaxis

La forma de usar Merge es la siguiente:

MERGE
[ TOP ( n ) [ PERCENT ] ]
[ INTO ] <Tabla_Destino> [ [ AS ] AliasTablaDestino ]
USING <Tabla_Origen> [ [ As ] AliasTablaOrigen]
ON <CondiciónMergeComparación>
[ WHEN MATCHED [ AND <Condición> ]
THEN <Isntrucción Si encuentra> ] [ …n ]
[ WHEN NOT MATCHED [ BY TARGET ] [ AND <Condición> ]
THEN <Instrucción Si NO Encuentra en Destino> ]
[ WHEN NOT MATCHED BY SOURCE [ AND <Condición> ]
THEN <Instrucción Si NO Encuentra en Origen> ] [ …n ]

 



 

Ejemplo

En este ejemplo, se tienen dos bases de datos cada una con una tabla de Productos.
La base de datos Planes, con la tabla ProductosPlanes y la base de datos Desarrollo con la tabla ProductosDesarrollo.

Base de datos Planes
create database Planes
go
use Planes
go
Create table ProductosPlanes
(
ProductosCodigo nchar(4),
ProductosDescripcion nvarchar(100),
ProductosPrecioUnitario Numeric(10,2),
ProductosStockActual Numeric(10,2),
constraint ProductosPk Primary key (ProductosCodigo)
)
go

Insertar registros en la tabla ProductosPlanes
insert into ProductosPlanes values (‘8856′,’Lámpara Personal’,25.4,100)
insert into ProductosPlanes values (‘8636′,’Auriculares Deluxe’,98.4,20)
insert into ProductosPlanes values (‘4685′,’Escritorio Gerencial’,525,6)
insert into ProductosPlanes values (‘5780′,’Marco Foto’,20,80)
insert into ProductosPlanes values (‘0665′,’Impresora HP’,65,15)
go

BASE DE DATOS DESARROLLO
create database Desarrollo
go
use Desarrollo
go
Create table ProductosDesarrollo
(
ProductosCodigo nchar(4),
ProductosDescripcion nvarchar(100),
ProductosPrecioUnitario Numeric(10,2),
ProductosStockActual Numeric(10,2),
constraint ProductosPk Primary key (ProductosCodigo)
)
go

Insertar los registros en la tabla ProductosDesarrollo

Note los cambios, se han insertado registros y las coincidencias o diferencias se notan en la siguientes figuras.

— Primer registro “Lámpara Personal” con un valor del Stock de 80
— Segundo registro “Auriculares Deluxe” con precio de 115
— Tercer y cuarto registros nuevos
— Quinto registro “Impresora HP” tiene la descripción cambiada y nuevo Stock de 15 a 25

insert into ProductosDesarrollo values (‘8856′,’Lámpara Personal’,25.4,80)
insert into ProductosDesarrollo values (‘8636′,’Auriculares Deluxe’,115,20)
insert into ProductosDesarrollo values (‘9879′,’Switch Ethernet 993’,85,3)
insert into ProductosDesarrollo values (‘4567′,’Memoria USB 16 GB’,50,10)
insert into ProductosDesarrollo values (‘0665′,’Impresora HP Multifuncional’,65,25)
go

Antes del Merge
select * from Planes.dbo.ProductosPlanes
select * from Desarrollo.dbo.ProductosDesarrollo
go

Haciendo el Merge
La tabla Origen es Productos de la base de datos Desarrollo y la tabla Destino en Productos en la base de datos Planes

Merge into Planes.dbo.ProductosPlanes as TablaDestino
using Desarrollo.dbo.ProductosDesarrollo as TablaOrigen
on (TablaDestino.ProductosCodigo = TablaOrigen.ProductosCodigo)
when not matched then
insert values (TablaOrigen.ProductosCodigo, TablaOrigen.ProductosDescripcion,
TablaOrigen.ProductosPrecioUnitario, TablaOrigen.ProductosStockActual)
when matched then
update set ProductosDescripcion = TablaOrigen.ProductosDescripcion,
ProductosPrecioUnitario = TablaOrigen.ProductosPrecioUnitario,
ProductosStockActual = TablaOrigen.ProductosStockActual;
go

Visualizar los resultados
En la tabla destino ProductosPlanes se han insertados dos registros.
select * from Planes.dbo.ProductosPlanes
En la tabla origen de la base de datos Desarrollo los registros son los mismos.
select * from Desarrollo.dbo.ProductosDesarrollo
go

La imagen muestra los resultados.