Skip to content

Instrucción Merge de TSQL

18/06/2012

Desde SQL Server 2008 tenemos disponible la instrucción MERGE de TSQL. Esta instrucción nos permite realizar INSERT, UPDATE o DELETE sobre una tabla basado en el join con otra. Esta funcionalidad es especialmente útil para sincronizar dos tablas de acuerdo a la diferencia en la información de cada una de ellas.

Les dejo un link con el detalle de esta instrucción:

http://technet.microsoft.com/en-us/library/bb510625.aspx

y un ejemplo de uso:

 

--// Crea las tablas origen (SOURCE) y destino (TARGET) como variables de tipo tabla (obviamente se pueden usar tablas normales)

DECLARE @t1 TABLE (id int, nombre varchar(16), email varchar(32) )

DECLARE @t2 TABLE (id int, nombre varchar(16), email varchar(32) )

--// Inserto  valores en la tabla origen

INSERT INTO @t1 VALUES (1, 'Nombre 1', 'Nombre1@domain.com')
INSERT INTO @t1 VALUES (2, 'Nombre 2', 'Nombre2@domain.com')
INSERT INTO @t1 VALUES (3, 'Nombre 3', 'Nombre3@domain.com')

--// Inserto valores en la tabla destino

INSERT INTO @t2 VALUES (4, 'Nombre 4','Nombre4@domain.com')
INSERT INTO @t2 VALUES (1, '', '')

--// Verifico los valores de la tabla destino (solo para ver el resultado)

SELECT * FROM @t2

--// Combino los registros de las dos tablas

MERGE @t2 AS [target] USING @t1 AS [sourceT]
ON ([target].id =[sourceT] .id)
WHEN NOT MATCHED BY TARGET THEN
INSERT [sourceT] (id, name, email) VALUES([sourceT] .id, [sourceT] name, [sourceT].email)
WHEN MATCHED THEN
UPDATE [sourceT] SET [target].name =[sourceT].name, [target].email = [sourceT].email

--// Obtengo las operaciones que se realizaron por cada
OUTPUT $action, inserted.*, deleted.*;

--// Veo el resultado final en la tabla destino
SELECT * FROM @t2
Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: