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

SQL Server 2000 觸發器實戰應用指南

     編輯:關於SqlServer

觸發器基礎概念

觸發器是針對資料表的 INSERT、UPDATE、DELETE 動作自動執行的預存程序,常用於強制商務規則、維護資料完整性、稽核追蹤。

INSERT 觸發器與 inserted 邏輯資料表

  • 新增資料時,新資料列同時存在於觸發器資料表與 inserted 邏輯資料表中。
  • inserted 保存已插入資料列的複本,可供觸發器檢查、比對、參考交易記錄產生的資料變更。
  • 觸發器透過查詢 inserted 決定是否執行後續動作。

範例:自動扣減庫存

USE Northwind;
CREATE TRIGGER OrdDet_Insert
ON [Order Details]
FOR INSERT
AS
UPDATE P SET UnitsInStock = P.UnitsInStock - I.Quantity
FROM Products AS P INNER JOIN Inserted AS I
ON P.ProductID = I.ProductID;

DELETE 觸發器與 deleted 邏輯資料表

  • 刪除資料列時,被刪除資料列移入 deleted 邏輯資料表。
  • deleted 儲存於記憶體高速緩存,不佔用磁碟空間。
  • TRUNCATE TABLE 不會啟動 DELETE 觸發器 (不寫入交易記錄)。

範例:停用產品類別下所有產品

USE Northwind;
CREATE TRIGGER Category_Delete
ON Categories
FOR DELETE
AS
UPDATE P SET Discontinued = 1
FROM Products AS P INNER JOIN deleted AS d
ON P.CategoryID = d.CategoryID;

UPDATE 觸發器運作機制

UPDATE 可視為兩步驟:先刪除舊資料 (產生 deleted),再插入新資料 (產生 inserted)。觸發器可同時存取兩個邏輯資料表比對前後值。

實務建議

  • 避免在觸發器中執行耗時操作 (跨資料庫查詢、發送郵件等),影響交易效能。
  • 善用 IF UPDATE(column_name) 判斷特定欄位是否被修改,減少不必要處理。
  • 謹慎使用巢狀觸發器,設定 sp_configure 'nested triggers', 0 可停用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved