Проверка наличия товара перед оформлением заказа
Не раз случалось, что клиенты оформляли заказы на товары, которых не было в достаточном количестве на складе.
Эту проблему легко решить, добавив новый триггер с условной логикой.
Триггер должен срабатывать при добавлении новых строк в таблицу Orders и проверять, достаточно ли товара на складе для выполнения заказа.
Если товара достаточно, триггер выполнит ту же операцию INSERT, что и вызвавшая его — только на этот раз значения будут взяты из специальной таблицы inserted.
Это упражнение является частью курса
Создание и оптимизация триггеров в SQL Server
Инструкции к упражнению
- Добавьте новый триггер, который срабатывает при выполнении операции
INSERTи проверяет, можно ли выполнить заказ с учётом текущего остатка на складе. - Вызовите ошибку, если товара недостаточно. В противном случае выполните операцию
INSERT, используя специальную таблицуinserted.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
-- 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;