注文前に在庫を確認する
これまでに、会社が注文を満たすだけの在庫を持っていないのに、顧客が商品を注文してしまうケースが複数発生しました。
この問題は、アクションに条件分岐を持つ新しいトリガーを追加することで簡単に解決できます。
トリガーは Orders テーブルに新しい行が追加されたときに発火し、指定された商品の在庫がその注文を満たすのに十分かどうかを確認する必要があります。
在庫が十分であれば、トリガーはそれを発火させたものと同じ INSERT 操作を実行します。今回は、値は特別なテーブルである inserted から取得します。
この演習はコースの一部です
SQL Server のトリガー構築と最適化
演習の手順
INSERT文で発火し、注文数量が現在の在庫で満たせるかを確認する新しいトリガーを追加してください。- 在庫不足の場合はエラーを発生させ、十分な場合は特別なテーブル
insertedを利用してINSERTを実行してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
-- 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;