Нет хорошего автоматического способа сделать это (увы). Так что это действительно зависит от того, насколько вы готовы (пере) написать свои процы, чтобы иметь возможность сделать это.
Если у вас есть механизм ведения журнала, вы можете прочитать журнал и выяснить, кто вам звонил.
Например, если вы осуществляете ведение журнала, вставляя в таблицу, например:
CREATE TABLE Log
(timestamp dattime,
spid int,
procname varchar(255),
message varchar(255) )
... text of proc ...
INSERT INTO Log
SELECT get_date(), @@spid, @currentproc, 'doing something'
-- you have to define @currentproc in each proc
-- get name of caller
SELECT @caller = procname
FROM Log
WHERE spid = @@spid
AND timestamp = (SELECT max(timestamp)
FROM Log
WHERE timestamp < get_date()
AND procname != @currentproc )
Это не сработает для рекурсивных вызовов, но, возможно, кто-то может это исправить?