【SQL Server】存储过程的设计与概念(2)从存储过程接收信息

来源:互联网 发布:手机壁纸软件哪个好 编辑:程序博客网 时间:2024/05/21 17:18
从存储过程结束信息的途径有4种:
    1、结果集
    2、输出参数
    3、返回值
    4、全局游标

返回结果集:
    为了从存储过程中获取结果集,需要在存储过程主体中插入返回结果集的T-SQL语句,最简单的方法就是使用SELECT语句,但也可以调用另一个存储过程。
    也可以从一个存储过程中返回多个结果集,这样的存储过程只不过是多包含几个SELECT语句,但要注意有些客户端的数据访问技术可以访问所有的结果集如ADO,ADO.NET,但是有的技术只能访问一个结果集。

输入参数与输出参数: 
    创建存储过程使可以包含一个由逗号(,)分割的参数列表,分为两种类型,分别为输入参数和输出参数。参数的默认类型为输入参数:
1create proc getJobInfo
2@job_id int
3as
4select * from jobs where job_id=@job_id
5go
6execute getJobInfo 1

如下包含一个输出参数,注意output的使用,以及在调用存储过程时接收输出参数的方法:
 1create proc getJobDesc
 2@job_id int,
 3@job_desc varchar(2000) output
 4as
 5select @job_desc=job_desc from jobs where job_id=@job_id
 6go
 7
 8declare @desc varchar(2000)
 9execute getJobDesc 1,@desc output
10print @desc

参数的默认值:
   如果存储过程语句具有参数,则必须在调用存储过程时提供这些参数的值,否则SQL SERVER 会报错。但也可以为这些参数设定默认值,这样用户就不一定非要提供这些参数了!
1
2ALTER  proc getJobInfo
3@job_id int=1
4as
5select * from jobs where job_id=@job_id
6go
7
8execute getJobInfo
9execute getJobInfo 2

按名称传参与按位置传参:
    按位置传参要求各个参数的顺序必须是一定的,而按名称传参则无此限制
 1create proc getJob
 2@min_lvl int,
 3@max_lvl int
 4as
 5begin
 6  select * from jobs where min_lvl>@min_lvl and max_lvl<@max_lvl
 7end
 8
 9---按名称传参
10execute getJob @max_lvl=800,@min_lvl=10
11---按位置传参
12execute getJob 10,800 --相当于:execute getJob @min_lvl=10,@max_lvl=800

返回值:
   每一个存储过程都可以以一个Return语句结尾,该语句的后面紧跟可以被调用者读取的integer值,或结果为整型值的表达式,如果没有显式的设置该值,怎返回默认值0。因为返回值局限于整形数据类型,他们最常用的场合就是向调用者发送状态和错误代码!
   注意以下调用返回值时的方法与OUTPUT的不同:
 1alter proc getJob
 2@job_id int,
 3@desc varchar(2000) output
 4as
 5begin
 6  select @desc=job_desc from jobs where job_id=@job_id 
 7  return @@error
 8end
 9
10declare @id int,@desc varchar(2000),@result int
11-------把存储过程直接赋值给用于接收返回值的变量
12execute @result=getJob 1,@desc output
13select @result,@desc