您的位置:首页 > 数据库

SQL Server中获得EXEC后面的sql语句或者存储过程的返

2009-03-10 17:00 483 查看
前言:在数据库程序开发的过程中,我们经常会碰到利用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这句里条件中有一个列名是动态变化的)的构造,所以要放在exec里执行,但是同时我又要返回2个结果,所以执行时的代码为:

        exec
sp_executesql @rc,N'@a int
output,@b int output',@cstucount output,@ccount output--将exec的结果放入变量中的做法
        

这样就将返回值放到了,@cstucount,@ccount两个变量中,得到了我们想要的结果。

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

就这么简单,我们就获得了返回值,然后就可以利用它了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐