Вам лучше преобразовать первый процесс в функцию TABLE-VALUED. Если он включает несколько операторов, вам нужно сначала определить структуру возвращаемой таблицы и заполнить ее.
Пример:
CREATE proc getRecords @t char(1)
as
set nocouut on;
-- other statements --
-- final select
select * from master..spt_values where type = @t
GO
- становится -
CREATE FUNCTION fn_getRecords(@t char(1))
returns @output table(
name sysname,
number int,
type char(1),
low int,
high int,
status int) as
begin
-- other statements --
-- final select
insert @output
select * from master..spt_values where type = @t
return
end;
Однако, если это прямой выбор (или его можно записать как одно утверждение), вы можете использовать форму INLINE tvf, которая высоко оптимизирована
CREATE FUNCTION fn2_getRecords(@t char(1))
returns table as return
-- **NO** other statements; single statement table --
select * from master..spt_values where type = @t
Второй процесс просто выбирает из первого процесса
create proc getRecordsByStatus @t char(1)
as
select status, COUNT(*) CountRows from dbo.fn2_getRecords(@t)
group by status
А где ты раньше звонил
EXEC firstProc @param
чтобы получить результат, вы теперь выбираете из него
SELECT * FROM firstProc(@param)