INSERT 陳述式執行後。inserted 邏輯表:包含新增列的完整副本,可供觸發器讀取/比對/驗證。CREATE TRIGGER OrdDet_Insert ON [Order Details] FOR INSERT AS
UPDATE P SET UnitsInStock = P.UnitsInStock - I.Quantity
FROM Products P INNER JOIN Inserted I ON P.ProductID = I.ProductID;deleted 邏輯表:保存被刪除列的副本。deleted 與實體表無相同列。TRUNCATE TABLE 不觸發(不記錄 Log)。CREATE TRIGGER Category_Delete ON Categories FOR DELETE AS
UPDATE P SET Discontinued = 1
FROM Products P INNER JOIN Deleted D ON P.CategoryID = D.CategoryID;deleted 存放舊值,inserted 存放新值。IF UPDATE(ColumnName) 偵測特定欄位是否被修改,精確控制觸發邏輯。CREATE TRIGGER Price_Guard ON Products FOR UPDATE AS
IF UPDATE(UnitPrice)
BEGIN
IF EXISTS (SELECT * FROM Inserted I JOIN Deleted D ON I.ProductID = D.ProductID
WHERE I.UnitPrice > D.UnitPrice * 1.3 OR I.UnitPrice < D.UnitPrice * 0.7)
BEGIN
RAISERROR('單價變動超過 30%,交易回滾', 16, 1);
ROLLBACK TRANSACTION;
END
END