Disparadores en SQL Server: triggers de inventario y clientes con ejemplos
Clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 5 KB
Actualizado el
Resumen
El documento muestra cómo crear disparadores (triggers) en SQL Server que actualizan automáticamente el inventario de productos al insertar o eliminar pedidos. Después propone un segundo ejercicio con tablas de clientes, un historial de eliminaciones y un trigger que traslada los clientes borrados a una tabla de respaldo. Incluye los scripts de creación y las pruebas de verificación de cada disparador.
Puntos clave
- Un trigger FOR INSERT sobre Pedido reduce las existencias del producto en la tabla Producto según la cantidad pedida.
- Un trigger FOR DELETE sobre Pedido devuelve la cantidad eliminada a las existencias del producto.
- Los triggers acceden a los datos afectados mediante las tablas virtuales INSERTED (inserciones) y DELETED (eliminaciones).
- Un trigger FOR DELETE sobre Clientes registra en la tabla Historial la fecha, la descripción, el usuario (SUSER_SNAME()) y el ID del cliente eliminado.
- Otro trigger FOR DELETE sobre Clientes copia el registro eliminado en la tabla Clientes_Borrados.
- Para verificar los disparadores se ejecutan INSERT y DELETE de prueba y después se consultan las tablas afectadas con SELECT.
Resumen generado con IA a partir del documento. Ponte a prueba
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;
Preguntas frecuentes
¿Cómo se actualiza el inventario automáticamente al insertar un pedido en SQL Server?
Con un disparador FOR INSERT sobre la tabla Pedido que resta la cantidad pedida de las existencias del producto en la tabla Producto. El trigger TR8_E1_1 del documento realiza esta operación.
¿Qué hace el disparador TR8_E1_2?
Se ejecuta al eliminar un pedido de la tabla Pedido y suma de nuevo la cantidad eliminada a las existencias del producto correspondiente.
¿Qué tablas virtuales usan los disparadores para leer los datos afectados?
Los disparadores usan INSERTED para las filas insertadas y DELETED para las filas eliminadas.
Ponte a prueba
Tarjetas de repaso
Pulsa una tarjeta para ver la respuesta.
Test
Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.