觸發器是特殊類型的預存程序,關鍵差異在於:
CHECK 更複雜的跨表、跨欄位業務規則。此外,觸發器能比對資料修改前後狀態差異,據以執行處理;同一表同一操作類型可建立多個觸發器,實現多角度處理。
觸發器效能通常較低,主要耗時在參考其他資料表的磁碟 I/O。inserted/deleted 駐留記憶體,但觸發器查詢的其他表通常不在記憶體。設計時應最小化跨表存取。
| 類型 | 觸發時機 | 建立對象 | 同操作可建立數量 | 順序控制 |
|---|---|---|---|---|
| AFTER | DML 完成後 | 僅資料表 | 多個 | sp_settriggerorder 指定 First/Last |
| INSTEAD OF | 取代 DML 動作 | 資料表或視圖 | 僅一個 | 不適用(唯一) |
觸發器是資料庫層實作複雜業務規則、參照完整性與稽核的利器。理解兩大類型的觸發時機、建立限制與順序控制,能避免設計錯誤並發揮最大效用。