НачатьНачать бесплатно

Проверка наличия товара перед оформлением заказа

Не раз случалось, что клиенты оформляли заказы на товары, которых не было в достаточном количестве на складе.

Эту проблему легко решить, добавив новый триггер с условной логикой.

Триггер должен срабатывать при добавлении новых строк в таблицу 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;
Редактировать и запускать код