En esta ocasión voy a publicar como crear un Trigger desde cero, para que tengan un pantallazo en general un Trigger es como su nombre lo dice un “desencadenador”, el cual ejecuta una serie de operaciones Transact SQL al producirse una acción en la base de datos, esta acción puede ser cambios a nivel datos (DML – Data Manipulation Language) y a nivel esquema (DDL – Data Definition Language), los cambios a nivel de datos se refieren a INSERT/DELETE/UPDATE que se puedan producir en los datos de la base de datos. Los Triggers se usan generalmente para hacer auditorias sobre las tablas, y para tener un mejor control de las mismas, ya que si los datos son borrados los mismos se pueden recuperar, también se pueden usar para guardar datos de algo en especifico como las compras de un proveedor.
Empezamos con el ejemplo de DML para cuando se produzca una acción de Insert sobre una determinada tabla. Las tablas que guardan estas acciones son dos INSERTED (inserciones) y DELETED (borrados).
Para ello creamos una tabla producto y otra tabla que contendrá todos los productos insertados.
Tabla Productos, “tb_Productos”, tiene los campos idProducto (llave primaria, identidad), nombre, precio.
Tabla “tb_Productos_Audit_Insert”, tiene los campos idProducto (clave primaria), nombre, precio, acción (guardara el nombre de la acción producida), fecha_accion (guarda la fecha y hora cuando se produce la acción de insert).
Cargo datos en la tabla Productos.
Luego creamos el Trigger:
CREATE TRIGGER [dbo]. [tg_Productos_Audit_Insert] //NOMBRE DEL TRIGGER
ON [dbo].[tb_Productos] //ELEGIMOS LA TABLA SOBRE LA CUAL SE REALIZARA
FOR INSERT //ELEGIMOS LA ACCION
AS
DECLARE @now datetime //DECLARO UNA VARIABLE QUE GUARDE LA FECHA Y HORA
DECLARE @accion nvarchar(10) //DECLARO UNA VARIABLE QUE TENDRA EL NOMBRE DE LA ACCION
BEGIN TRY //PONEMOS LA EJECUCION DE LA CONSULTA SQL DENTRO DE UN TRY PARA QUE SI NO SE EJECUTA CORRECTAMENTE HACEMOS UN ROLLBACK DE LA TRANSACCION
SET @now = getdate() //TOMO LA FECHA Y HORA
SET @accion = 'INSERTED' //PONGO EL NOMBRE DE LA ACCION
INSERT INTO [dbo].[tb_Productos_Audit_Insert] //TABLA PARA LA AUDITORIA DEL INSERT
(idProducto, Nombre, Precio, Accion, Fecha_Accion)
SELECT INSERTED.idProducto, INSERTED.Nombre, INSERTED.Precio, @accion, @now
FROM INSERTED // TRAE LOS VALORES DE LA TABLA INSERTED, SI BORRAMOS LOS DATOS LA TABLA VIRTUAL QUE CONTENDRA LOS DATOS BORRADOS ES DELETED
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION //VUELVE ATRAS LOS CAMBIOS
RAISERROR (‘HUBO UN ERROR SOBRE LA INSERCION DE LA TABLA AUDITORA DE PRODUTOS’,20,1)
END CATCH
GO
HACEMOS ALGUNOS INSERT SOBRE LA TABLA PRODUCTOS.
HACEMOS una consulta de SELECT sobre la tabla auditora:
Los Triggers se guardan sobre la tabla en donde se utilizara:
Espero que les haya gustado, cualquier pregunta consúltenme, mi correo es cristian.ayala08@gmail.com
0 comentarios:
Publicar un comentario