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, kursun bir parçasıdır
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme
Egzersiz 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ı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
-- 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;