viernes, 30 de septiembre de 2016

Fundamentos de Bases de Datos: UPDATE e INSERT desde un Conjunto de Filas

Diagrama Entidad Relación:







/* Exists */
SELECT *
     FROM NotaCiclo
     INNER JOIN NotaFinal
     ON NotaCiclo.CodAlumno = NotaFinal.CodAlumno
     AND NotaCiclo.CodCurso = NotaCiclo.CodCurso;

/* NOT EXISTS */
     SELECT NotaCiclo.CodAlumno, NotaCiclo.CodCurso,
          NotaCiclo.Nota, *
     FROM NotaCiclo
     LEFT OUTER JOIN NotaFinal
     ON NotaCiclo.CodAlumno = NotaFinal.CodAlumno
     AND NotaCiclo.CodCurso = NotaCiclo.CodCurso
     WHERE NotaFinal.CodAlumno IS NULL
     AND NotaFinal.CodCurso IS NULL
     AND CodCiclo = 7;


Ejemplo Completo


DECLARE @Ciclo INT = 7

DECLARE @Fecha DATE;

SELECT @Fecha = FechaFin
     FROM Ciclo
     WHERE CodCiclo = @Ciclo;

/* UPDATE Existentes */
UPDATE NotaFinal
     SET NotaFinal = NotaCiclo.Nota,
     NotaFinal.Fecha = @Fecha
     FROM NotaFinal
     INNER JOIN NotaCiclo
     ON NotaFinal.CodAlumno = NotaCiclo.CodAlumno
     AND NotaFinal.CodCurso = NotaCiclo.CodCiclo
     WHERE NotaCiclo.CodCiclo = @Ciclo;  

/* INSERT Valores Nuevos */

INSERT INTO NotaFinal
     (CodAlumno, CodCurso, Fecha, NotaFinal)
SELECT NotaCiclo.CodAlumno, NotaCiclo.CodCurso,
          @Fecha, NotaCiclo.Nota
     FROM NotaCiclo
     LEFT OUTER JOIN NotaFinal
     ON NotaCiclo.CodAlumno = NotaFinal.CodAlumno
     AND NotaCiclo.CodCurso = NotaCiclo.CodCurso
     WHERE NotaFinal.CodAlumno IS NULL
     AND NotaFinal.CodCurso IS NULL
     AND CodCiclo = @Ciclo;




No hay comentarios.:

Publicar un comentario