首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MS SQL Server 建立觸發器完整指南:Enterprise Manager 與 CREATE TRIGGER 語法

     編輯:關於SqlServer

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

12.6.1 使用 Enterprise Manager 建立

  1. 啟動 EM,連線伺服器,展開資料庫 → 目標資料表。
  2. 右鍵資料表 → [All Tasks] → [Manage Triggers...]。
  3. 名稱欄選 [New],文字區輸入觸發器程式碼。
  4. 點選 [Check Syntax] 驗證,[Apply] 套用,[OK] 完成。

EM 建立觸發器

12.6.2 使用 CREATE TRIGGER T-SQL 指令

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 中的觸發器文本。
AFTERDML 完成後觸發(預設)。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)。比較運算子 = 表全部符合,> 表部分符合。

建立觸發器完整範例

實務建議

  • 優先使用 T-SQL 腳本建立,利於版控與部署自動化。
  • 生產環境建議加上 WITH ENCRYPTION 保護智財。
  • 明確指定 AFTER 或 INSTEAD OF,避免預設行為混淆。
  • 觸發器主體採用集合式操作,避免游標與逐列邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved