Как найти идентификатор родительской хранимой процедуры во вложенной процедуре? - PullRequest
2 голосов
/ 08 октября 2010

Если я нахожусь во вложенной хранимой процедуре, я хотел бы иметь возможность получить идентификатор процедуры, которая на один уровень выше.
Пример:

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 ]

3 голосов
/ 08 октября 2010

Нет встроенного способа получить это. Вам нужно передать идентификатор @@procid или имя object_name(@@procid) родителя в дочерний элемент в качестве другого параметра.

1 голос
/ 08 октября 2010

Я не верю, что есть такая функция для Parent_ProcID.Но вы можете попробовать передать идентификатор родителя Proc для дочерней процедуры.ИЛИ вы можете создать глобальную временную таблицу в родительском proc и вставить в нее ее proc_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
1 голос
/ 08 октября 2010

Добавьте параметр в свою дочернюю процедуру и передайте родительский @@ 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
0 голосов
/ 08 октября 2010

Если вы пытаетесь отладить систему, использование SQL Profiler и отслеживание событий SP: Starting и SP: Completed может помочь разобраться.Также может помочь колонка NestLevel, особенно для фильтрации.

0 голосов
/ 08 октября 2010

Извините, удобной функции нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...