从存储过程结束信息的途径有4种:
1、结果集
2、输出参数
3、返回值
4、全局游标
返回结果集:
为了从存储过程中获取结果集,需要在存储过程主体中插入返回结果集的T-SQL语句,最简单的方法就是使用SELECT语句,但也可以调用另一个存储过程。
也可以从一个存储过程中返回多个结果集,这样的存储过程只不过是多包含几个SELECT语句,但要注意有些客户端的数据访问技术可以访问所有的结果集如ADO,ADO.NET,但是有的技术只能访问一个结果集。
输入参数与输出参数:
创建存储过程使可以包含一个由逗号(,)分割的参数列表,分为两种类型,分别为输入参数和输出参数。参数的默认类型为输入参数:
1
create proc getJobInfo
2
@job_id int
3
as
4
select * from jobs where job_id=@job_id
5
go
6
execute getJobInfo 1
如下包含一个输出参数,注意output的使用,以及在调用存储过程时接收输出参数的方法:
1
create proc getJobDesc
2
@job_id int,
3
@job_desc varchar(2000) output
4
as
5
select @job_desc=job_desc from jobs where job_id=@job_id
6
go
7
8
declare @desc varchar(2000)
9
execute getJobDesc 1,@desc output
10
print @desc
参数的默认值:
如果存储过程语句具有参数,则必须在调用存储过程时提供这些参数的值,否则SQL SERVER 会报错。但也可以为这些参数设定默认值,这样用户就不一定非要提供这些参数了!
1
2
ALTER proc getJobInfo
3
@job_id int=1
4
as
5
select * from jobs where job_id=@job_id
6
go
7
8
execute getJobInfo
9
execute getJobInfo 2
按名称传参与按位置传参:
按位置传参要求各个参数的顺序必须是一定的,而按名称传参则无此限制
1
create proc getJob
2
@min_lvl int,
3
@max_lvl int
4
as
5
begin
6
select * from jobs where min_lvl>@min_lvl and max_lvl<@max_lvl
7
end
8
9
---按名称传参
10
execute getJob @max_lvl=800,@min_lvl=10
11
---按位置传参
12
execute getJob 10,800 --相当于:execute getJob @min_lvl=10,@max_lvl=800
返回值:
每一个存储过程都可以以一个Return语句结尾,该语句的后面紧跟可以被调用者读取的integer值,或结果为整型值的表达式,如果没有显式的设置该值,怎返回默认值0。因为返回值局限于整形数据类型,他们最常用的场合就是向调用者发送状态和错误代码!
注意以下调用返回值时的方法与OUTPUT的不同:
1
alter proc getJob
2
@job_id int,
3
@desc varchar(2000) output
4
as
5
begin
6
select @desc=job_desc from jobs where job_id=@job_id
7
return @@error
8
end
9
10
declare @id int,@desc varchar(2000),@result int
11
-------把存储过程直接赋值给用于接收返回值的变量
12
execute @result=getJob 1,@desc output
13
select @result,@desc