如果我在嵌套存储过程中,我希望能够获得一级过程的过程ID。
例如:
create proc procedure1
as
print 'Current proc id: ' + @@PROCID
print 'Parent proc id: ' + @@PROCID_PARENT --or something?
go
create proc procedure2
as
exec procedure1
go
exec procedure2
会给出类似的结果:
Current proc id: 93440434
Parent proc id: 10022237
我有一个可以在其他几个存储过程中执行的存储过程,我希望能够知道哪个过程正在执行子过程。这可能吗?
答案 0 :(得分:3)
没有内置的方法来检索它。您需要将父级的ID @@procid
或名称object_name(@@procid)
作为另一个参数传递给子级。
答案 1 :(得分:1)
向您的子程序添加一个参数并传递父@@ PROCID ...
create proc procedure1
@parentProcId int
as
print 'Current proc id: ' + cast(@@PROCID as varchar)
print 'Parent proc id: ' + cast(@parentProcID as varchar)
go
create proc procedure2
as
exec procedure1 @@PROCID
go
exec procedure2
答案 2 :(得分:1)
我不相信Parent_ProcID有这样的功能。但您可以尝试将Parent的Proc ID传递给子过程。或者您可以在父proc中创建一个全局临时表,并将其proc_id插入其中。这将允许您从全局临时表
访问父进程id全球临时表的想法
create proc procedure1
as
DECLARE @ParentProcID int;
print 'Current proc id: ' + @@PROCID
SET @ParentProcID = SELECT TOP 1 PROCID FROM ##myParentProcIDs
print 'Parent proc id: ' + @ParentProcID
go
create proc procedure2
as
Select
@@ProcID as PROCID into ##myParentProcIDs
exec procedure1
DROP TABLE ##myParentProcIDs
go
exec procedure2
答案 3 :(得分:0)
抱歉,没有方便的功能。
答案 4 :(得分:0)
如果您要调试系统,使用SQL事件探查器并跟踪SP:启动和SP:已完成的事件可能有助于解决问题。 NestLevel列也有帮助,特别是对于过滤。