Explicación de Triggers en SQL Server

Un Trigger de base de datos, es un evento que se dispara cuando se realizan modificaciones en una tabla.
Internamente se crean tablas temporales mientras se realiza la actualización de la tabla. Son dos tablas, llamadas DELETED e INSERTED. No existe UPDATED. Si es una actualización los datos nuevos se ingresan en INSERTED y los viejos en DELETED.

Este código permite que si se borra un departamento, se borren automaticamente todos los empleados de dicho departamento.

CREATE TRIGGER BorrarEmpDept
ON Dept
FOR DELETE AS

DELETE FROM EMP
FROM EMP,DELETED
WHERE EMP.DEPT_NO=DELETED.DEPT_NO

Esta línea rara en medio FROM EMP,DELETED es una imposición de Microsoft que requiere que se incluya un FROM Adicional con todas las tablas involucradas en la consulta.

Con este si se cambia el código de un departamento, automaticamente actualizará esa clave de departamento en todos los empleados de dicho departamento.

CREATE TRIGGER ModifEmpDept
ON Dept
FOR UPDATE AS

UPDATE EMP
SET EMP.DEPT_NO=INSERTED.DEPT_NO
FROM EMP,DELETED,INSERTED
WHERE EMP.DEPT_NO=DELETED.DEPT_NO

Se puede ver, que hay que incluir el FROM adicional. En este último caso, en INSERTED, tenemos una fila con un Departamento con el codigo nuevo 33. Lo cogemos y se lo asignamos a los códigos de departamento de los empleados que tuvieran el código viejo 30, el cuál obtenemos de la tabla DELETED.

 

En este último ejemplo cambiamos el código del departamento DEPT.DEPT_NO del 30 al 33. El proceso interno es el siguiente.

  • 1º Inserta en la tabla DELETED el registro del Departamento modificado, que incluye su clave DELETED.DEPT_NO = 30.
  • 2º El departamento modificado con DEPT_NO= 33, se crea como un nuevo registro en INSERTED.DPTO_NO=33.
  • 3º Ejecuta el código del trigger, que actualiza los DEPT_NO de la tabla EMP que estuvieran en 30, y los pone en 33.
  • 4ºRealiza el cambio en la tabla DEPT, que es donde se inicio la actualización.
  • 5ºBorra las tablas temporales DELETED e INSERTED.

Deja un comentario