В общем, я бы использовал временную таблицу, специфичную для сеанса, чтобы у вас было гораздо меньше накладных расходов на управление прерванными транзакциями и тому подобное, поскольку он очищался.
Недостатком является то, что он немного хрупкий, поскольку зависимости невидимы:
create procedure a
as
set nocount on
create table #tbl (id int)
exec b
set nocount off
select * from #tbl
go
create procedure b
as
set nocount on
insert into #tbl
values(1)
exec c
go
create procedure c
as
set nocount on
insert into #tbl
values(2)
go
exec a
Я бы обычно уклонялся от @@SPID
определения объема, если вы как-то забудете убрать, вы будетеимеют неожиданные результаты.
Тем не менее, решение, которое вы используете, сильно зависит от имеющейся проблемы. В статье Эрланда Alex connected указаны все возможные варианты.