Execストアドプロシージャから返された値を変数に割り当てることはできますか?
何かのようなもの
DECLARE @count int
SET @count = Execute dbo.usp_GetCount @Id=123
exec
の代わりにsp_executesql
を使用して、スカラー出力パラメーターに割り当てることができます
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
プロシージャでRETURNを使用する場合
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
ストアドプロシージャのレコードセットをスカラー変数に直接割り当てることはできません
いつものように、これを行うには多くの方法がありますが、最も簡単な方法は次のとおりです。
DECLARE @count int
Execute @count = dbo.usp_GetCount @Id=123