Вы можете использовать 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