建立觸發器前必須確認:CREATE TRIGGER 必須為批次首句;擁有者預設擁有權限且不可轉授;觸發器屬資料庫物件,命名遵循識別碼規則;僅能建立於目前資料庫,但可跨庫參考物件;不可建立於視圖/暫存表(僅基礎表);一個觸發器對應一個表;TRUNCATE TABLE、WRITETEXT 不會觸發觸發器。

CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION]
[FOR | AFTER | INSTEAD OF] [DELETE] [,] [INSERT] [,] [UPDATE]
[WITH APPEND]
[NOT FOR REPLICATION]
AS
sql_statement [...n]
| 參數 | 說明 |
|---|---|
trigger_name | 觸發器名稱,資料庫內唯一,符合命名規則。 |
table_name | 關聯的基礎表名稱,必須已存在。 |
WITH ENCRYPTION | 加密 syscomments 中的觸發器文本。 |
AFTER | DML 完成後觸發(預設)。FOR 同義,僅限資料表。 |
INSTEAD OF | 取代 DML 動作,可建立於表或視圖,同操作類型僅一個。 |
DELETE/INSERT/UPDATE | 指定觸發操作,至少一個,順序不限,逗號分隔。 |
WITH APPEND | 相容性層級 ≤ 65 時,追加同類型觸發器。 |
NOT FOR REPLICATION | 複寫過程中不觸發此觸發器。 |
AS sql_statement | 觸發器主體:條件判斷與處理邏輯。 |
IF UPDATE(column) | 檢測特定欄位是否被 INSERT/UPDATE(不含 DELETE)。 |
IF (COLUMNS_UPDATED()) | 位元遮罩檢測多欄位是否被 INSERT/UPDATE。 |
表 T 有 C1~C5 五欄。欲檢查僅 C2 被修改:遮罩值 = 2 (00010)。檢查 C1~C4 全被修改:遮罩值 = 14 (01110)。比較運算子 = 表全部符合,> 表部分符合。

WITH ENCRYPTION 保護智財。AFTER 或 INSTEAD OF,避免預設行為混淆。