Comprobar el stock antes de registrar pedidos
En varias ocasiones, los clientes han hecho pedidos de productos cuando la empresa no tenía stock suficiente para atenderlos.
Este problema se puede solucionar fácilmente añadiendo un trigger nuevo con lógica condicional en sus acciones.
El trigger debe dispararse cuando se añadan nuevas filas a la tabla Orders y comprobar si la empresa tiene stock suficiente de los productos indicados para cumplir esos pedidos.
Si hay stock suficiente, el trigger realizará la misma operación INSERT que lo disparó; solo que, esta vez, los valores se tomarán de la tabla especial inserted.
Este ejercicio forma parte del curso
Crear y optimizar desencadenadores en SQL Server
Instrucciones del ejercicio
- Añade un trigger nuevo que se dispare para sentencias
INSERTy compruebe si la cantidad del pedido puede cubrirse con el stock actual. - Lanza un error si no hay stock suficiente. En caso contrario, realiza un
INSERThaciendo uso de la tabla especialinserted.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
-- Create a new trigger to confirm stock before ordering
CREATE TRIGGER ConfirmStock
ON Orders
INSTEAD OF ___
AS
IF EXISTS (SELECT *
FROM Products AS p
INNER JOIN inserted AS i ON i.Product = p.Product
WHERE p.Quantity < i.Quantity)
BEGIN
___ ('You cannot place orders when there is no stock for the order''s product.', 16, 1);
END
ELSE
BEGIN
INSERT INTO Orders (OrderID, Customer, Product, Price, Currency, Quantity, WithDiscount, Discount, OrderDate, TotalAmount, Dispatched)
SELECT OrderID, Customer, Product, Price, Currency, Quantity, WithDiscount, Discount, OrderDate, TotalAmount, Dispatched FROM ___;
END;