web-dev-qa-db-ja.com

set @var = execストアドプロシージャ

Execストアドプロシージャから返された値を変数に割り当てることはできますか?

何かのようなもの

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

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
25
Martin Smith

プロシージャで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

ストアドプロシージャのレコードセットをスカラー変数に直接割り当てることはできません

23
gbn

いつものように、これを行うには多くの方法がありますが、最も簡単な方法は次のとおりです。

DECLARE @count int

Execute @count =  dbo.usp_GetCount @Id=123
10
Mark Hedley