Contenido del curso
Contenido del curso
Rubens A. Rangel Gomez
jefred bedoya
José Bernardo Navas Pleitez
John Salcedo
Los triggers son herramientas que permiten ejecutar código automáticamente ante cambios en las tablas (INSERT, UPDATE, DELETE) y se usan principalmente para auditoría e integridad de datos.
inserted y deleted para acceder a los valores nuevos y antiguos. Soporta triggers AFTER e INSTEAD OF, lo que permite ejecutar la lógica después del evento o en lugar de él.NEW y OLD en lugar de tablas especiales y soporta triggers BEFORE y AFTER. Cada trigger se define para cada operación y fila (FOR EACH ROW).NEW y OLD y requiere asociar la lógica del trigger a una función almacenada. Soporta BEFORE y AFTER para los eventos principales.💡 Conclusión: aunque los tres sistemas soportan triggers, la sintaxis y la forma de acceder a los valores anteriores y nuevos varía. SQL Server tiene un enfoque más integrado con tablas especiales, mientras que MySQL y PostgreSQL usan alias por fila, lo que puede influir en cómo se implementa la lógica de auditoría y en el rendimiento.
Fundamentos de los Triggers en SQL Server
Definición y Naturaleza
Un trigger es código que se ejecuta automáticamente ante eventos específicos (INSERT, UPDATE, DELETE) en una tabla. Funcionan como alarmas: indispensables si se usan con precisión, pero problemáticos si se activan sin control.
Componentes Clave
AFTER (después del evento) o INSTEAD OF (en lugar del evento).inserted: Contiene las filas nuevas o los valores posteriores al cambio.deleted: Contiene las filas eliminadas o los valores previos al cambio.Casos de Uso Recomendados
constraints) no son suficientes.Limitaciones y Riesgos
Cuándo evitar su uso
constraint puede resolverlo, es siempre más eficiente.Comparto resultados de implementacion de trigger de auditoria para la tabla Clientes
CREATE TABLE AuditoriaClientes ( AuditoriaID INT IDENTITY(1,1) PRIMARY KEY, ClienteID INT NOT NULL, Accion NVARCHAR(10) NOT NULL, -- INSERT, UPDATE, DELETE ActivoAntes NVARCHAR(50) NULL, ActivoDespues NVARCHAR(50) NULL, NombreAntes NVARCHAR(50) NULL, NombreDespues NVARCHAR(50) NULL, Usuario NVARCHAR(100) NOT NULL DEFAULT SYSTEM_USER, FechaHora DATETIME NOT NULL DEFAULT GETDATE() ); GO
CREATE TRIGGER TR_Clientes_Auditoria ON Clientes AFTER INSERT, UPDATE, DELETE AS BEGIN SET NOCOUNT ON; INSERT INTO AuditoriaClientes (ClienteID, Accion, ActivoAntes, ActivoDespues, NombreAntes, NombreDespues) SELECT ISNULL(i.ClienteID, d.ClienteID), CASE WHEN EXISTS (SELECT 1 FROM INSERTED) AND NOT EXISTS (SELECT 1 FROM DELETED) THEN 'INSERT' WHEN EXISTS (SELECT 1 FROM INSERTED) AND EXISTS (SELECT 1 FROM DELETED) THEN 'UPDATE' WHEN NOT EXISTS (SELECT 1 FROM INSERTED) AND EXISTS (SELECT 1 FROM DELETED) THEN 'DELETE' END, d.Activo, i.Activo, d.Nombre, i.Nombre FROM INSERTED i FULL OUTER JOIN DELETED d ON i.ClienteID = d.ClienteID; END; GO UPDATE Clientes SET Activo = 0 WHERE ClienteID = 1; SELECT * FROM AuditoriaClientes; UPDATE Clientes SET Nombre = 'Mario' WHERE ClienteID = 1; SELECT * FROM AuditoriaClientes;
Buena explicación de los triggers es uno de los temas que se deben saber, pero realmente en la practica tienen mas contras que pros, lo curioso es que yo he visto triggers en muchos de los temas que dijo el profe en los cuales no se deberían implementar y si realmente son bien problemáticos cuando se salen de control. De hecho lo mejor si se hacen por una situación muy especifica deberían documentarse pero pues la realidad es que muchas veces se olvidan y bueno después llegan los tickets.