在 SQL Server 中获取触发器的调用者

Posted

技术标签:

【中文标题】在 SQL Server 中获取触发器的调用者【英文标题】:Get caller of trigger in SQL Server 【发布时间】:2011-03-30 11:55:26 【问题描述】:

您能告诉我如何检索执行触发器的呼叫者 ID 或姓名吗?

例如,我想知道哪个 SP 执行触发器或可能由管理工作室的更新调用的触发器?

我知道@@PROCID返回触发器的ID,不能用。

我也知道在 SP 中我们编写 CONTEXT_INFO 并从触发器中读取它的解决方案。 但在这种情况下,我们应该在所有修改某个表的 SP 中设置 CONTEXT_INFO。

是否存在像@@PROCID 这样的最简单方法?

【问题讨论】:

您是在寻找调用对象的名称还是调用用户/安全主体的名称? 并非如此。可以使用扩展事件获取 TSQL 调用堆栈,但这是一个重量级的东西,不适合在触发器中普遍使用。 @Quantum Elf:我正在寻找调用对象的名称或它的 ID @Martin: 是的,看起来我会用 CONTEXT_INFO 来学习技巧 【参考方案1】:

如果是 SQL Server 2005 或 2008,并且有 DDL 触发器,则可以使用eventdata()

Here's a link to the msdn page.

基本上,它返回一个 XML 数据集,您可以对其进行解析以获取诸如谁调用它 (data(/EVENT_INSTANCE/LoginName)[1])、命令是什么等信息。

【讨论】:

不幸的是 eventdata() 不适合,因为我的触发器是 DML @Anton - 那么据我所知,你无法得到你想要的。 无论如何感谢您的回复,现在我知道 eventdata() 以备将来使用

以上是关于在 SQL Server 中获取触发器的调用者的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ (Visual Studio) 中查找函数的调用者

FxCop,组成依赖程序集的调用者列表

GNU gcc/ld - 使用在同一个目标文件中定义的调用者和被调用者包装对符号的调用

如何在 MySQL 中使用 SQL SECURITY DEFINER 特征定义的过程中检测真正的调用者名称?

如何获取 SQL 调用者的 SPID

js 五 jquery的使用,调用