觸發器是資料庫應用的可重用工具。本文系統整理官方教程核心內容,涵蓋四類觸發器運作機制、邏輯表用法與 INSTEAD OF 進階特性。
| 觸發器類型 | INSERTED 表 | DELETED 表 |
|---|---|---|
| INSERT | 新增列副本 | 空 |
| DELETE | 空 | 被刪除列副本 |
| UPDATE | 更新後新值(後像) | 更新前舊值(前像) |
SELECT * FROM inserted 檢視。inserted/deleted 讓觸發器能引用 DML 導致的日誌變化。CREATE TRIGGER OrdDet_Insert ON [Order Details] FOR INSERT AS
UPDATE P SET UnitsInStock = P.UnitsInStock - I.Quantity
FROM Products P JOIN Inserted I ON P.ProductID = I.ProductID
CREATE TRIGGER Category_Delete ON Categories FOR DELETE AS
UPDATE P SET Discontinued = 1
FROM Products P JOIN Deleted D ON P.CategoryID = D.CategoryID
CREATE TRIGGER Employee_Update ON Employees FOR UPDATE AS
IF UPDATE(EmployeeID)
BEGIN
RAISERROR('Employee ID cannot be modified.', 10, 1)
ROLLBACK TRANSACTION
END
IF UPDATE(col) 檢測單一欄位;COLUMNS_UPDATED() 位元遮罩檢測多欄位。WITH CHECK OPTION 視圖。inserted/deleted。TRUNCATE TABLE 不觸發 DELETE 觸發器(不寫入日誌)。deleted 表空間配置於記憶體,高速緩存。掌握 inserted/deleted 雙表語意、四類觸發器適用場景與 IF UPDATE 精準攔截,是實作資料完整性、稽核與業務規則的核心技能。INSTEAD OF 進一步打破視圖更新限制,擴展資料庫層業務表達力。