Disparadores en SQL Server: Ejercicios Prácticos con Tablas de Pedidos y Clientes
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 5 KB
Ejercicio 1: Gestión de Inventario con Triggers
En este ejercicio, crearemos disparadores (triggers) para gestionar automáticamente el inventario de productos al realizar o eliminar pedidos.
1. Disparador para Actualizar Inventario al Realizar un Pedido
Este disparador reduce las existencias del producto en la tabla Producto
cada vez que se inserta un nuevo pedido en la tabla Pedido
.
GO
CREATE TRIGGER TR8_E1_1
ON Pedido
FOR INSERT
AS
DECLARE @Id_Producto int;
SET @Id_Producto = (SELECT I.Id_Producto FROM INSERTED AS I);
DECLARE @Cantidad int;
SET @Cantidad = (SELECT I.Cantidad FROM INSERTED AS I);
UPDATE Producto SET Existencias = Existencias - @Cantidad WHERE Id_Producto = @Id_Producto;
2. Disparador para Actualizar Inventario al Eliminar un Pedido
Este disparador incrementa las existencias del producto en la tabla Producto
cuando se elimina un pedido de la tabla Pedido
.
GO
CREATE TRIGGER TR8_E1_2
ON Pedido
FOR DELETE
AS
DECLARE @Id_Producto int;
SET @Id_Producto = (SELECT D.Id_Producto FROM DELETED AS D);
DECLARE @Cantidad int;
SET @Cantidad = (SELECT D.Cantidad FROM DELETED AS D);
UPDATE Producto SET Existencias = @Cantidad + Existencias WHERE Id_Producto = @Id_Producto;
3. Verificación de los Disparadores Creados
Para verificar los disparadores creados, realizaremos pruebas insertando y eliminando registros en la tabla Pedido
.
Prueba del Disparador TR8_E1_1
INSERT INTO Pedido VALUES (1, 5, 20);
SELECT * FROM Producto;
SELECT * FROM Pedido;
Prueba del Disparador TR8_E1_2
DELETE Pedido WHERE Id_Pedido = 1;
SELECT * FROM Producto;
SELECT * FROM Pedido;
Ejercicio 2: Gestión de Clientes y Registro de Actividad con Triggers
En este ejercicio, crearemos disparadores para gestionar la eliminación de clientes y registrar la actividad en una tabla de historial.
1. Creación de Tablas
Primero, crearemos las tablas necesarias para este ejercicio:
Clientes
: Almacena la información de los clientes.Clientes_Borrados
: Almacena los registros de los clientes eliminados.Historial
: Registra la actividad de eliminación de clientes.
CREATE TABLE Clientes(
Id_Cliente int PRIMARY KEY,
Compañía varchar(60),
Contacto varchar(60),
Ciudad varchar(50),
Teléfono varchar(30)
);
CREATE TABLE Clientes_Borrados(
Id_Cliente int PRIMARY KEY,
Compania varchar(60),
Contacto varchar(60),
Ciudad varchar(50),
Teléfono varchar(30)
);
CREATE TABLE Historial(
Fecha Datetime,
Descripción varchar(80),
Usuario varchar(40)
);
2. Inserción de Datos de Ejemplo en la Tabla Clientes
Insertaremos algunos registros de ejemplo en la tabla Clientes
:
INSERT INTO Clientes VALUES
(19203,'Cablecom','Gerardo Martínez Sauceda','Morelia','823-985542'),
(3433,'Urbi','Alejandra Willis Barrera','Guadalajara','1234-84774'),
(23,'STC','Patricia Hernández Guzmán','Monterrey','8294-9588'),
(4552,'Aviación','José Vela Díaz','Nayarit','790-857899'),
(2456,'Interjet','Martha Solís Trujillo','Querétaro','875-00024');
3. Disparador para Registrar la Eliminación de un Cliente en la Tabla Historial
Este disparador inserta un registro en la tabla Historial
cada vez que se elimina un cliente de la tabla Clientes
.
GO
CREATE TRIGGER TR8_E2_3
ON Clientes
FOR DELETE
AS
DECLARE @Id_Cliente varchar(10);
SET @Id_Cliente = CAST((SELECT D.Id_Cliente FROM DELETED AS D) AS VARCHAR(10));
DECLARE @Descripcion varchar(30);
SET @Descripcion = 'Se elimino el cliente con ID: ';
INSERT INTO Historial VALUES (GETDATE(), @Descripcion + @Id_Cliente ,SUSER_SNAME());
4. Disparador para Mover un Cliente Eliminado a la Tabla Clientes_Borrados
Este disparador mueve el registro eliminado de la tabla Clientes
a la tabla Clientes_Borrados
.
GO
CREATE TRIGGER TR8_E2_4
ON Clientes
FOR DELETE
AS
DECLARE @Id_Cliente int,
@Compañía varchar(60),
@Contacto varchar(60),
@Ciudad varchar(50),
@Teléfono varchar(30);
SET @Id_Cliente = (SELECT D.Id_Cliente FROM DELETED AS D);
SET @Compañía = (SELECT D.Compañía FROM DELETED AS D);
SET @Contacto = (SELECT D.Contacto FROM DELETED AS D);
SET @Ciudad = (SELECT D.Ciudad FROM DELETED AS D);
SET @Teléfono = (SELECT D.Teléfono FROM DELETED AS D);
INSERT INTO Clientes_Borrados VALUES (@Id_Cliente, @Compañía, @Contacto, @Ciudad, @Teléfono);
5. Verificación de los Disparadores
Para verificar los disparadores, eliminaremos un registro de la tabla Clientes
y consultaremos las tablas Historial
y Clientes_Borrados
.
DELETE Clientes WHERE Id_Cliente = 4552;
SELECT * FROM Clientes;
SELECT * FROM Clientes_Borrados;
SELECT * FROM Historial;