Перевірка запасів перед оформленням замовлень
Кілька разів клієнти оформляли замовлення на товари, коли в компанії не було достатньо запасів, щоб їх виконати.
Цю проблему легко вирішити, додавши новий тригер з умовною логікою для його дій.
Тригер має спрацьовувати, коли до таблиці 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;