如何在嵌套过程中找到父存储过程的ID?

时间:2010-10-08 17:54:13

标签: sql sql-server sql-server-2005

如果我在嵌套存储过程中,我希望能够获得一级过程的过程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

我有一个可以在其他几个存储过程中执行的存储过程,我希望能够知道哪个过程正在执行子过程。这可能吗?

5 个答案:

答案 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列也有帮助,特别是对于过滤。