当在SQL Server中启用了触发器的递归并且我在after触发器中更新了同一个表时,何时执行了嵌套(递归)触发器:
答案 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语句之后执行其他代码。