前言:在數(shù)據(jù)庫(kù)程序開(kāi)發(fā)的過(guò)程中,我們經(jīng)常會(huì)碰到利用EXEC來(lái)執(zhí)行一段需要返回某些值的sql語(yǔ)句(通常是構(gòu)造動(dòng)態(tài)sql語(yǔ)句時(shí)使用),或者在一個(gè)存儲(chǔ)過(guò)程中利用EXEC調(diào)用另一個(gè)有返回值的存儲(chǔ)過(guò)程(必須獲得返回值),那么如何獲得這些返回值呢?
1.EXEC執(zhí)行sql語(yǔ)句的情況
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的結(jié)果放入變量中的做法
--select @csql+@rsql
--select @cstucount
上面的@rc這個(gè)sql語(yǔ)句的功能是找出特定時(shí)間段里所有有空的教室數(shù)量以及這些教室所能容納的學(xué)生人數(shù),因?yàn)樯婕暗絼?dòng)態(tài)的sql語(yǔ)句(@csql這句里條件中有一個(gè)列名是動(dòng)態(tài)變化的)的構(gòu)造,所以要放在exec里執(zhí)行,但是同時(shí)我又要返回2個(gè)結(jié)果,所以執(zhí)行時(shí)的代碼為:
exec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount output--將exec的結(jié)果放入變量中的做法
這樣就將返回值放到了,@cstucount,@ccount兩個(gè)變量中,得到了我們想要的結(jié)果。
2.exec執(zhí)行帶返回值的存儲(chǔ)過(guò)程的情況
我們來(lái)看一個(gè)簡(jiǎn)單的存儲(chǔ)過(guò)程:
create PRocedure ProTest
(
@name varchar(10),
@money int output
)
as
begin
if(@name='1')
set @money=1000
else
set @money=2000
end
這個(gè)只是一個(gè)簡(jiǎn)單的示例,這個(gè)存儲(chǔ)過(guò)程返回的是@money 這個(gè)參數(shù)的值,那么當(dāng)我們?cè)诹硗庖粋€(gè)存儲(chǔ)過(guò)程中調(diào)用此存儲(chǔ)過(guò)程的時(shí)候如何獲取這個(gè)參數(shù)呢,方法如下:
declare @m int ---用來(lái)接收返回值的變量
exec ProTest @name='1',@money=@m output --一定要注名是output
就這么簡(jiǎn)單,我們就獲得了返回值。
新聞熱點(diǎn)
疑難解答
圖片精選