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

SQL Server 觸發器強制執行業務規則與資料完整性完整指南

     編輯:關於SqlServer

觸發器 vs 約束條件

SQL Server 2000 提供兩大機制強制業務規則:約束條件與觸發器。觸發器是特殊存儲程序,在 INSERT、UPDATE、DELETE 時自動觸發,可查詢其他資料表、包含複雜 T-SQL、與觸發陳述式視為單一交易(可回滾),嚴重錯誤自動回滾整筆交易。

觸發器優勢

  • 可透過相關資料表實現級聯變更(但級聯參考完整性約束效率更高)
  • 能強制比 CHECK 約束更複雜的規則,可參考其他資料表欄位
  • 可比較修改前後資料表狀態並採取行動
  • 同類觸發器可多個,對同一修改採取不同動作
  • 支援自訂錯誤訊息與複雜錯誤處理

何時用約束、何時用觸發器?

  • 實體完整性: 必以索引(PK/UK 約束或獨立索引)在最低層級強制
  • 定義域完整性: 能用 CHECK 約束就用
  • 參考完整性: 首選 FOREIGN KEY 約束
  • 必須用觸發器的情況:
    • 需依其他資料表欄位驗證(CHECK 做不到)
    • 需自訂錯誤訊息/複雜錯誤處理
    • 無法用 REFERENCES 子句定義級聯動作時的複雜參考驗證

觸發器與約束交互作用

若資料表同時有約束與 INSTEAD OF 觸發器:INSTEAD OF 執行後、AFTER 觸發器前檢查約束。約束違反則回滾 INSTEAD OF 動作且不執行 AFTER 觸發器。

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