始める無料で始める

注文前に在庫を確認する

これまでに、会社が注文を満たすだけの在庫を持っていないのに、顧客が商品を注文してしまうケースが複数発生しました。

この問題は、アクションに条件分岐を持つ新しいトリガーを追加することで簡単に解決できます。

トリガーは 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;
コードを編集して実行