Возможно ли присвоить переменной значение, возвращаемое из хранимой процедуры exec?
Что-то вроде
DECLARE @count int
SET @count = Execute dbo.usp_GetCount @Id=123
Ответ 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