SQL ServerでEXECの後のsql文またはストアド・プロシージャの戻り値を取得する方法

1728 ワード

前言:データベース・プログラムの開発の過程で、EXECを利用していくつかの値を返す必要があるsql文(通常は動的sql文を構築する際に使用される)を実行したり、あるストレージの過程でEXECを利用して別の戻り値のあるストレージ・パス(戻り値を取得しなければならない)を呼び出したりすることがよくありますが、これらの戻り値はどのように得られますか?
1,EXECがsql文を実行する場合
declare @rsql varchar(250)
declare @csql varchar(300)
declare @rc nvarchar(500)
declare @cstucount int
declare @ccount int
set @rsql='(select Classroom_id from EA_RoomTime where zc='+@zc+' and xq='+@xq+' and T'+@time+'='' '') and ClassroomType=''1'''
--exec(@rsql)
set @csql='select @a=sum(teststucount),@b=sum(classcount) from EA_ClassRoom where classroom_id in '
set @rc=@csql+@rsql
exec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount output-- exec           
--select @csql+@rsql
--select @cstucount

上の@rcというsql文の機能は、特定の時間帯に空いているすべての教室の数と、これらの教室に収容できる学生の数を見つけることです.動的なsql文(@csqlという文の条件の中に1つの列名が動的に変化している)の構造にかかわるので、execで実行しますが、同時に2つの結果を返すので、実行時のコードは:
exec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount output-- exec           

これで戻り値を,@cstucount,@ccountの2つの変数に配置し,我々が望む結果を得た.
2,execが戻り値付きのストレージ・プロシージャを実行する場合、簡単なストレージ・プロシージャを見てみましょう.
create procedure ProTest
(
         @name varchar(10),
         @money int output
)
as
begin
        if(@name='1')
                  set @money=1000
        else
                  set @money=2000
end
これは単純な例にすぎません.このストレージ・プロシージャは@moneyというパラメータの値を返します.では、別のストレージ・プロシージャでこのストレージ・プロシージャを呼び出すときに、このパラメータをどのように取得するかは、次のようにします.
declare @m int ---          
exec ProTest @name='1',@money=@m output --      output
は簡単で、戻り値が得られ、利用できます.