从存储过程结束信息的途径有4种:
1、结果集
2、输出参数
3、返回值
4、全局游标
返回结果集:
为了从存储过程中获取结果集,需要在存储过程主体中插入返回结果集的T-SQL语句,最简单的方法就是使用SELECT语句,但也可以调用另一个存储过程。
也可以从一个存储过程中返回多个结果集,这样的存储过程只不过是多包含几个SELECT语句,但要注意有些客户端的数据访问技术可以访问所有的结果集如ADO,ADO.NET,但是有的技术只能访问一个结果集。
输入参数与输出参数:
创建存储过程使可以包含一个由逗号(,)分割的参数列表,分为两种类型,分别为输入参数和输出参数。参数的默认类型为输入参数:
如下包含一个输出参数,注意output的使用,以及在调用存储过程时接收输出参数的方法:
参数的默认值:
如果存储过程语句具有参数,则必须在调用存储过程时提供这些参数的值,否则SQL SERVER 会报错。但也可以为这些参数设定默认值,这样用户就不一定非要提供这些参数了!
按名称传参与按位置传参:
按位置传参要求各个参数的顺序必须是一定的,而按名称传参则无此限制
返回值:
每一个存储过程都可以以一个Return语句结尾,该语句的后面紧跟可以被调用者读取的integer值,或结果为整型值的表达式,如果没有显式的设置该值,怎返回默认值0。因为返回值局限于整形数据类型,他们最常用的场合就是向调用者发送状态和错误代码!
注意以下调用返回值时的方法与OUTPUT的不同:
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
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
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
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
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
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