qty
、qtydiff
、price
、value
の4つの列を持つテーブルがあります。
が欲しい after update trigger
は、qty行の値が変更されたときに起動します(複数行)。
Before trigger
はqtyから古い値を読み取って保存し、Afterトリガーはqty
列の新しい値から古い値を減算し、qtydiff
の差の値を取得してprice
列に乗算し、value
列の結果を更新します。
以下のコードは、まだテストしていない概念コードです。機能するかどうかはわかりませんが、更新の前後に同じトリガーで機能する方法はありますか?
CREATE TRIGGER [dbo].[Price_Modified]
ON [dbo].[STOCK]
BEFORE UPDATE ON STOCK
AS BEGIN
SET NOCOUNT ON;
IF UPDATE (Qty)
BEGIN
SELECT qty
FROM STOCK
END
AFTER UPDATE
AS BEGIN
SET NOCOUNT ON;
IF UPDATE (Qty)
BEGIN
UPDATE Stock
SET value = price * qtydiff
FROM STOCK
WHERE qtydiff = oldvalue - newvalue
END
END
SQL ServerにはBEFORE
トリガーはありません。 INSTEAD OF
トリガーを使用して同様の機能を提供できますが、トリガーコードはUPDATE
を実行する必要があります。
ただし、AFTER
トリガーは、ここでINSERTED
(新しい)およびDELETED
(古い)仮想テーブルを使用して計算に必要な値を取得することで使用できます。以下の例では、変更できない値を持つStockID
という名前の主キー列を想定しています。
CREATE TRIGGER [dbo].[Price_Modified]
ON [dbo].[STOCK]
AFTER UPDATE
AS
SET NOCOUNT ON;
IF UPDATE (Qty)
BEGIN
UPDATE s
SET value = new.price * (new.Qty - old.Qty)
FROM STOCK AS s
JOIN inserted AS new ON new.StockID = s.StockID
JOIN deleted AS old ON old.StockID = s.StockID
WHERE new.Qty <> old.Qty;
END;
GO