Sipariş vermeden önce stoğu kontrol etme
Birden fazla kez, müşteriler şirketin siparişleri karşılayacak kadar stoğu olmadığı hâlde ürünler için sipariş verdi.
Bu sorun, eylemleri için koşullu mantık içeren yeni bir tetikleyici eklenerek kolayca çözülebilir.
Tetikleyici, Orders tablosuna yeni satırlar eklendiğinde çalışmalı ve şirketin bu siparişleri karşılayacak kadar belirtilen ürün stokuna sahip olup olmadığını kontrol etmelidir.
Yeterli stok varsa, tetikleyici kendisini tetikleyenle aynı INSERT işlemini gerçekleştirecek—yalnız bu kez değerler inserted özel tablosundan alınacaktır.
Bu egzersiz
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme
kursunun bir parçasıdırEgzersiz talimatları
INSERTdeyimleri için çalışan ve sipariş miktarının mevcut stokla karşılanıp karşılanamayacağını kontrol eden yeni bir tetikleyici ekle.- Yetersiz stok varsa bir hata yükselt. Aksi takdirde,
insertedözel tablosundan yararlanarak birINSERTgerçekleştir.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
-- 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;