【发布时间】:2016-02-05 13:48:37
【问题描述】:
有没有办法在存储过程中检查它是由 Job 触发还是使用其他方法(例如 SSIS、at hoc query 等)触发的?
有类似的问题SQL Server Find What Jobs Are Running a Procedure 但它只是检查工作步骤,但这不是我需要的。
这是我的场景。
我有 SP spDoSomethingImportant,这可以由 Job 或即数据库中的用户运行。
因此,在该 SP 中,我想检查它是否由作业触发并获取该作业的名称或 ID。
【问题讨论】:
-
你不能按照你的要求去做。但是您可以确定连接是从哪个用户建立的。假设您有一个专门的工作用户,这应该很简单。
-
感谢您的评论。不幸的是,可能有很多用户可以直接运行这个 SP,或者它会按计划运行(通过 Sql Agent - 服务帐户),所以我恐怕做不到。
-
是的,我不这么认为。请记住,sql server 并不关心您的工作。他们真正做的只是制作一个像其他用户一样执行 sql 的好包。因此,除非您将该信息放在连接字符串中,否则您无法判断哪个作业调用了某个步骤。 ApplicationName、UserName 等,以帮助识别调用您的程序的内容。
-
是的,我是这么认为的。我想我将不得不添加类似参数的东西,我可以在其中传递作业 ID 或名称或其他有助于我跟踪触发给定存储过程的内容。谢谢
-
我想知道您是否可以使用CONTEXT_INFO 来帮助确定它是否来自固定呼叫者(代理、ssis 等),然后如果没有设置它,我们可以假设它是临时的?
标签: sql-server stored-procedures ssis sql-agent-job