Подтвердить что ты не робот

Set @var = exec stored_procedure

Возможно ли присвоить переменной значение, возвращаемое из хранимой процедуры exec?

Что-то вроде

DECLARE @count int
SET @count = Execute dbo.usp_GetCount @Id=123
4b9b3361

Ответ 1

Вы можете использовать sp_executesql вместо exec для назначения скалярным выходным параметрам

DECLARE @out int

EXEC sp_executesql N'select @out_param=10',
                   N'@out_param int OUTPUT',
                     @[email protected] OUTPUT

SELECT @out

Для exec Я знаю только, как это сделать, используя переменную таблицы

declare @out table
(
out int
)

insert into @out
exec('select 10')

select * 
from @out

Для хранимых процедур вы также должны использовать параметр output или код возврата. Последнее может возвращать единственное целое число и обычно предпочтительнее для возврата кодов ошибок, а не данных. Оба метода показаны ниже.

create proc #foo 
@out int output
as
set @out = 100
return 99

go

declare @out int, @return int

exec @return = #foo @out output

select @return as [@return], @out as [@out]

drop proc #foo

Ответ 2

Если вы используете RETURN в proc

DECLARE @count int
EXECUTE @count = dbo.usp_GetCount @Id=123

Параметр OUTPUT

DECLARE @count int
EXECUTE dbo.usp_GetCount @Id=123, @count OUTPUT

Перенаправить результаты в переменную temp table/table

DECLARE @count int
DECLARE @cache TABLE (CountCol int NOT NULL)
INSERT @cache EXECUTE dbo.usp_GetCount @Id=123
SELECT @count = CountCol FROM @cache

Вы не можете назначить набор записей из сохраненного proc непосредственно скалярной переменной

Ответ 3

Как обычно, многие способы сделать это, но проще всего:

DECLARE @count int

Execute @count =  dbo.usp_GetCount @Id=123