我们为所有SQL
存储过程和函数实现了一个全局错误记录器。当过程/函数遇到SQLEXCEPTION
或SQLWARNING
时,我们调用全局错误记录器并执行GET STACKED DIAGNOSTICS
语句。我们需要的部分数据是失败的过程名称。我没有看到GET DIAGNOSTICS
可用的返回值(ROUTINE_NAME
和ROUTINE_SCHEMA
有条件地返回,我总是需要它)。
我们目前正在使用QWVRCSTK API
,但我认为如果提供此数据,SQL有一个方法。有谁知道我怎么能这样做?
答案 0 :(得分:0)
select @@ProcID
返回当前Transact-SQL模块的对象标识符(ID)。 Transact-SQL模块可以是存储过程,用户定义的函数或触发器。
从那里你可以:
select OBJECT_NAME(@@ProcID)
将返回对象的名称。
答案 1 :(得分:0)
Retrieve Job Information (QUSRJOBI) API可以返回在作业中运行当前(最新)SQL语句的对象的限定名称。使用格式JOBI0900
访问作业的SQL信息。
您需要创建一个外部存储过程来调用API。 (如果您尝试将其作为SQL存储过程执行,问题是SP本身中的语句将是当前语句;并且您希望当前SQL位于调用过程中。)
调用此SP时,“当前”SQL应该是调用过程中后面的CALL语句。 (我希望这是有道理的。)