如何找到调用存储过程/函数



我们已经为所有SQL存储过程和函数实现了全局错误记录器。 当一个过程/函数遇到SQLEXCEPTIONSQLWARNING时,我们调用全局错误记录器并执行GET STACKED DIAGNOSTICS语句。 我们需要拥有的部分数据是失败的过程名称。 我没有看到GET DIAGNOSTICS可用的返回值(有条件地返回ROUTINE_NAMEROUTINE_SCHEMA,我总是需要它)。

我们目前正在使用 QWVRCSTK API ,但如果提供这些数据,我会假设 SQL 有一个方法。 有人知道我该怎么做吗?

检索作业信息 (QUSRJOBI) API 可以返回在作业中运行当前(最新)SQL 语句的对象的限定名称。使用格式JOBI0900访问作业的 SQL 信息。

您需要创建一个外部存储过程来调用 API。(如果您尝试将其作为 SQL 存储过程执行,问题在于 SP 本身中的语句将是当前语句;并且您希望当前 SQL 位于调用过程中。

调用此 SP 时,"当前"SQL 应该是调用过程中返回的 CALL 语句。(我希望这是有道理的。

select @@ProcID  

返回当前事务处理 SQL 模块的对象标识符 (ID)。Transact-SQL 模块可以是存储过程、用户定义的函数或触发器。

从那里你可以:

select OBJECT_NAME(@@ProcID)  

这将返回对象的名称。

.

最新更新