从存储过程结束信息的途径有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