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

SQL Server 觸發器實戰(二):INSTEAD OF 觸發器、檢視表觸發與三大操作場景

     編輯:關於SqlServer

承接上篇,深入 INSTEAD OF 觸發器特性、檢視表觸發器的 Inserted/Deleted 結構對應,以及 INSERT/DELETE/UPDATE 三大場景速查。

INSTEAD OF 觸發器中的 Inserted/Deleted

  • 格式與基礎表完全一致,每欄位一對一對應
  • 規則同一般表:不可指定 計算欄位、timestamp、IDENTITY (除非 IDENTITY_INSERT ON)、無預設值的 NOT NULL 欄位

檢視表上的 INSTEAD OF 觸發器

  • Inserted/Deleted 格式對應 檢視表 SELECT 清單
  • 例:CREATE VIEW EmployeeNames (EmployeeID, LName, FName) AS SELECT EmployeeID, LastName, FirstName FROM Employees → 魔術表含 int EmployeeID, nvarchar LName, nvarchar FName
  • 檢視表運算式 (常數、函數、複雜運算) 在魔術表中不直接對應單一基礎欄位,觸發器需自行處理

三大操作場景速查表

操作InsertedDeleted典型用途
INSERT有資料 (新值)無資料自動編號、跨表同步新增、稽核記錄
DELETE無資料有資料 (舊值)軟刪除、關聯資料級聯清理、刪除稽核
UPDATE有資料 (新值)有資料 (舊值)值變更偵測、修改歷程、跨表同步更新

實務建議

  1. 優先使用 AFTER 觸發器;僅當需攔截/取代 原操作 (如檢視表更新、複雜驗證失效回滾) 才用 INSTEAD OF
  2. 觸發器內避免耗時操作 (郵件、Web Service 呼叫),改用 Service Broker 非同步處理
  3. 嚴禁巢狀觸發器超過 32 層 (預設上限),設計時扁平化邏輯
  4. 大量資料操作 (BULK INSERT、TRUNCATE) 不會 觸發觸發器
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved