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

MS SQL Server 觸發器進階應用:遞迴觸發器與游標結合實戰

     編輯:關於SqlServer

觸發器執行時若嘗試更新觸發其本身的資料表,會導致遞迴觸發(無限循環)。SQL Server 提供兩種控制機制:限制巢狀層級(預設 32 層)與啟用/停用遞迴觸發器資料庫選項。

遞迴觸發器類型

  • 直接遞迴:觸發器執行動作(如 UPDATE)再次觸發同一觸發器。
  • 間接遞迴:觸發器觸發另一資料表的觸發器,後者又回頭觸發第一個觸發器。
預設情況下,除非啟用 recursive triggers 資料庫選項,否則不會發生遞迴觸發。

觸發器結合游標:實戰案例

下列範例示範在觸發器中使用游標處理多列資料,並配合遞迴觸發器控制,完成複雜的跨表同步邏輯。

範例1 範例2 範例3 範例4 範例5 範例6 範例7 範例8

最佳實務建議

  • 避免在觸發器中對同一資料表執行相同類型的 DML 操作。
  • 若業務確實需要遞迴,明確啟用資料庫選項並設定合理的巢狀層級上限(sp_configure 'nested triggers')。
  • 善用 TRIGGER_NESTLEVEL() 函數在觸發器內部偵測目前巢狀深度,決定是否繼續執行。
  • 觸發器中使用游標時,務必 CLOSE/DEALLOCATE 釋放資源,避免洩漏。

總結

遞迴觸發器是把雙面刃:功能強大但極易造成效能災難或邏輯錯誤。結合游標處理集合資料時,更需嚴謹設計終止條件與資源管理。生產環境建議預設關閉遞迴觸發,僅在經充分測試的受控情境下啟用。

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