| 特性 | Oracle | SQL Server |
|---|---|---|
| 多事件合併 | 支援 AFTER INSERT OR UPDATE OR DELETE ON table | 不支援,需建立分離觸發器 |
| 行級觸發 | FOR EACH ROW 原生支援 | 無 FOR EACH ROW,預設為語句級,需用 inserted/deleted 虛擬表模擬行級邏輯 |
| 觸發時機 | BEFORE / AFTER / INSTEAD OF | AFTER / INSTEAD OF (無 BEFORE) |
建立兩個獨立觸發器:
-- 插入觸發器
CREATE TRIGGER tr_table_insert
ON target_table
AFTER INSERT
AS
BEGIN
-- 處理 inserted 虛擬表資料
END;
-- 更新觸發器
CREATE TRIGGER tr_table_update
ON target_table
AFTER UPDATE
AS
BEGIN
-- 處理 inserted / deleted 虛擬表資料
END;
CREATE TRIGGER tr_example
ON my_table
AFTER INSERT, UPDATE -- SQL Server 允許在單一觸發器指定多事件,但內部仍需判斷
AS
BEGIN
IF EXISTS (SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted)
-- UPDATE 操作
ELSE IF EXISTS (SELECT * FROM inserted)
-- INSERT 操作
-- 逐行處理需配合 CURSOR 或集合式操作
END;
INSERTED/DELETED 表操作,效能更佳。