何时执行嵌套触发器

时间:2011-10-31 09:44:47

标签: sql-server

当在SQL Server中启用了触发器的递归并且我在after触发器中更新了同一个表时,何时执行了嵌套(递归)触发器:

  • 执行源触发器?
  • 原始触发器何时完成?

1 个答案:

答案 0 :(得分: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 C=@@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语句之后执行其他代码。