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: