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

MS SQL Server 觸發器運作原理:Inserted/Deleted 邏輯表與 @@ROWCOUNT

     編輯:關於SqlServer

觸發器之所以能感知 DML 變更、執行複雜邏輯,核心在於兩個記憶體內邏輯表:inserted 與 deleted。它們由系統自動建立/銷毀,結構與觸發器作用的基礎表完全一致,唯讀、不可直接修改。

12.7.1 Inserted 表功能

  • INSERT 觸發器:保存所有新增列的副本。
  • UPDATE 觸發器:保存更新後的新值(後像)。
  • 可用 SELECT * FROM inserted 檢視。

12.7.2 Deleted 表功能

  • DELETE 觸發器:保存所有被刪除列的副本,供觸發器中止時回復。
  • UPDATE 觸發器:保存更新前的舊值(前像)。

UPDATE 的雙表機制

UPDATE 內部拆解為:DELETE 舊列 → INSERT 新列。因此 UPDATE 觸發器同時擁有 deleted(舊值)與 inserted(新值),可比對欄位變化。

觸發器啟動特性

  • 每條 DML 陳述式僅啟動一次觸發器,無論影響多少列。
  • 需處理多列時,使用 @@ROWCOUNT 取得影響列數,配合迴圈或集合式邏輯處理。
  • 常見模式:IF @@ROWCOUNT = 0 RETURN 快速離開無影響情況。

效能考量

觸發器主要耗時在參考其他資料表(磁碟 I/O),而 inserted/deleted 永駐記憶體。設計時應:

  • 盡量減少觸發器內跨表查詢。
  • 必要時加入索引支援觸發器查詢。
  • 避免在觸發器中執行耗時運算或外部呼叫。

總結

深入理解 inserted/deleted 雙表機制、UPDATE 的前像/後像對應、以及 @@ROWCOUNT 的多列處理角色,是編寫正確、高效觸發器的理論基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved