是否有可靠的方法来检查触发的触发器是否是另一个*特定*触发器的 DML 操作的结果?

J.D*_*.D. 12 trigger sql-server t-sql standard-edition sql-server-2019

当触发器被触发时,是否有任何方法可以从触发器内部判断它是由于另一个特定触发器中发生的 DML 操作而被触发的?

有关调用堆栈的任何信息是否有可能在函数中公开EVENTDATA()?或者其他功能?我宁愿不必分解 XML。

理想情况下,我希望从第二个触发器的范围内获取执行导致第二个触发器触发的 DML 的原始触发器的名称。但我也愿意接受类似的识别来源的方法。

我可以完全控制有问题的两个触发器的代码。

Cha*_*ace 15

您可以TRIGGER_NESTLEVEL与 objectid 参数一起使用

IF TRIGGER_NESTLEVEL(OBJECT_ID(N'dbo.OtherTrigger', 'TR')) > 0
BEGIN
    -- do stuff
END;
Run Code Online (Sandbox Code Playgroud)

无论如何,该EVENTDATA()函数仅与 DDL 触发器相关。