2011-10-31 35 views
1

當觸發器遞歸在SQL Server啓用和我觸發後內的更新相同的表,當在嵌套(遞歸)觸發執行:當嵌套觸發exeucted

  • 內源的執行觸發?
  • 當原始觸發器完成後,它的工作?
+0

老實說,我沒有線索。你有沒有嘗試過使用Profiler來查看發生了什麼? –

回答

1
CREATE TABLE T (C INT ) 

GO 

CREATE TRIGGER TR_T 
ON T 
AFTER UPDATE 
AS 
BEGIN 
RAISERROR('TR - Entered @@NESTLEVEL=%d',0,1,@@NESTLEVEL) 
IF @@NESTLEVEL < 5 
    UPDATE T SET [email protected]@NESTLEVEL 
RAISERROR('TR - Exited @@NESTLEVEL=%d',0,1,@@NESTLEVEL) 
END 


GO 
SET NOCOUNT ON 
UPDATE T SET C=12 

輸出

TR - Entered @@NESTLEVEL=1 
TR - Entered @@NESTLEVEL=2 
TR - Entered @@NESTLEVEL=3 
TR - Entered @@NESTLEVEL=4 
TR - Entered @@NESTLEVEL=5 
TR - Exited @@NESTLEVEL=5 
TR - Exited @@NESTLEVEL=4 
TR - Exited @@NESTLEVEL=3 
TR - Exited @@NESTLEVEL=2 
TR - Exited @@NESTLEVEL=1 

結論:當執行在父觸發DML語句則控制被返回到它可以後可能執行額外的代碼父觸發子觸發器觸發DML語句。