Sql server 何时执行嵌套触发器

Sql server 何时执行嵌套触发器,sql-server,Sql Server,当SQL Server中启用了触发器上的递归,并且我在after触发器中更新了同一个表时,何时执行嵌套(递归)触发器: 在源触发器的执行范围内 当原始触发器完成工作时 结论:当父触发器中的DML语句被执行时,子触发器触发,然后控制返回到父触发器,父触发器可能在DML语句之后执行其他代码 结论:当父触发器中的DML语句被执行时,子触发器触发,然后控制返回到父触发器,父触发器可能会在DML语句之后执行额外的代码。老实说,我没有任何线索。你有没有试过用探查器看看发生了什么?老实说,我一点都不知道。

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

  • 在源触发器的执行范围内
  • 当原始触发器完成工作时
结论:当父触发器中的DML语句被执行时,子触发器触发,然后控制返回到父触发器,父触发器可能在DML语句之后执行其他代码


结论:当父触发器中的DML语句被执行时,子触发器触发,然后控制返回到父触发器,父触发器可能会在DML语句之后执行额外的代码。

老实说,我没有任何线索。你有没有试过用探查器看看发生了什么?老实说,我一点都不知道。您是否尝试过使用探查器查看发生了什么?
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