set @var = exec selected_procedure - PullRequest
       10

set @var = exec selected_procedure

13 голосов
/ 26 марта 2011

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

Что-то вроде

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

Ответы [ 3 ]

25 голосов
/ 26 марта 2011

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

DECLARE @out int

EXEC sp_executesql N'select @out_param=10',
                   N'@out_param int OUTPUT',
                     @out_param=@out 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
23 голосов
/ 26 марта 2011

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

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

Параметр OUTPUT

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

Перенаправить результаты во временную таблицу / переменную таблицы

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

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

10 голосов
/ 24 мая 2013

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

DECLARE @count int

Execute @count =  dbo.usp_GetCount @Id=123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...