11/25/2020 03:18:00 a. m.
Share:
Blog Informático sobre Análisis y Desarrollo de Software.
MERGE <table_destino> [AS TARGET]
USING <table_origen> [AS SOURCE]
ON <condicion_compara_llaves>
[WHEN MATCHED THEN
<accion cuando coinciden> ]
[WHEN NOT MATCHED [BY TARGET] THEN
<accion cuando no coinciden por destino> ]
[WHEN NOT MATCHED BY SOURCE THEN
<accion cuando no coinciden por origen> ];
Analizando la instrucción, podemos desglosar su funcionamiento:
--Sincronizar la tabla TARGET con
--los datos actuales de la tabla SOURCE
MERGE Alumno AS TARGET
USING AlumnoActual AS SOURCE
ON (TARGET.Codigo = SOURCE.Codigo)
--Cuandos los registros concuerdan con por la llave
--se actualizan los registros si tienen alguna variación
WHEN MATCHED AND TARGET.Nombre <> SOURCE.Nombre
OR TARGET.Promedio <> SOURCE.Promedio THEN
UPDATE SET TARGET.Nombre = SOURCE.Nombre,
TARGET.Promedio = SOURCE.Promedio
--Cuando los registros no concuerdan por la llave
--indica que es un dato nuevo, se inserta el registro
--en la tabla TARGET proveniente de la tabla SOURCE
WHEN NOT MATCHED BY TARGET THEN
INSERT (Codigo, Nombre, Promedio)
VALUES (SOURCE.Codigo, SOURCE.Nombre, SOURCE.Promedio)
--Cuando el registro existe en TARGET y no existe en SOURCE
--se borra el registro en TARGET
WHEN NOT MATCHED BY SOURCE THEN
DELETE
--Seccion opcional e informativa
--$action indica el tipo de accion
--en OUTPUT retorna cualquiera de las 3 acciones
--'INSERT', 'UPDATE', or 'DELETE',
OUTPUT $action,
DELETED.Codigo AS TargetCodigo,
DELETED.Nombre AS TargetNombre,
DELETED.Promedio AS TargetPuntos,
INSERTED.Codigo AS SourceCodigo,
INSERTED.Nombre AS SourceNombre,
INSERTED.Promedio AS SourcePuntos;
SELECT @@ROWCOUNT;
GO
SELECT * FROM Alumno
SELECT * FROM AlumnoActual
1 comentarios: