【SQL Server】存储过程的设计与概念(2)从存储过程接收信息
从存储过程结束信息的途径有4种:1、结果集
2、输出参数
3、返回值
4、全局游标
返回结果集:
为了从存储过程中获取结果集,需要在存储过程主体中插入返回结果集的T-SQL语句,最简单的方法就是使用SELECT语句,但也可以调用另一个存储过程。
也可以从一个存储过程中返回多个结果集,这样的存储过程只不过是多包含几个SELECT语句,但要注意有些客户端的数据访问技术可以访问所有的结果集如ADO,ADO.NET,但是有的技术只能访问一个结果集。
输入参数与输出参数:
创建存储过程使可以包含一个由逗号(,)分割的参数列表,分为两种类型,分别为输入参数和输出参数。参数的默认类型为输入参数:
create proc getJobInfo
@job_id int
as
select * from jobs where job_id=@job_id
go
execute getJobInfo 1
如下包含一个输出参数,注意output的使用,以及在调用存储过程时接收输出参数的方法:
create proc getJobDesc
@job_id int,
@job_desc varchar(2000) output
as
select @job_desc=job_desc from jobs where job_id=@job_id
go
declare @desc varchar(2000)
execute getJobDesc 1,@desc output
print @desc
参数的默认值:
如果存储过程语句具有参数,则必须在调用存储过程时提供这些参数的值,否则SQL SERVER 会报错。但也可以为这些参数设定默认值,这样用户就不一定非要提供这些参数了!
ALTERproc getJobInfo
@job_id int=1
as
select * from jobs where job_id=@job_id
go
execute getJobInfo
execute getJobInfo 2
按名称传参与按位置传参:
按位置传参要求各个参数的顺序必须是一定的,而按名称传参则无此限制
create proc getJob
@min_lvl int,
@max_lvl int
as
begin
select * from jobs where min_lvl>@min_lvl and max_lvl<@max_lvl
end
--按名称传参
execute getJob @max_lvl=800,@min_lvl=10
---按位置传参
execute getJob 10,800 --相当于:execute getJob @min_lvl=10,@max_lvl=800
返回值:
每一个存储过程都可以以一个Return语句结尾,该语句的后面紧跟可以被调用者读取的integer值,或结果为整型值的表达式,如果没有显式的设置该值,怎返回默认值0。因为返回值局限于整形数据类型,他们最常用的场合就是向调用者发送状态和错误代码!
注意以下调用返回值时的方法与OUTPUT的不同:
alter proc getJob
@job_id int,
@desc varchar(2000) output
as
begin
select @desc=job_desc from jobs where job_id=@job_id
return @@error
end
declare @id int,@desc varchar(2000),@result int
-------把存储过程直接赋值给用于接收返回值的变量
execute @result=getJob 1,@desc output
select @result,@desc
开发人员在运行任何T-SQL语句批处理时,SQL SERVER都要执行以下3步:
1、解析批处理
2、编译批处理
3、执行批处理开发人员在运行任何T-SQL语句批处理时,SQL SERVER都要执行以下3步:
1、解析批处理
2、编译批处理
3、执行批处理
解析
所谓“解析”是指SQL SERVER 命令解析模块首先检查批处理语法的过程。如果没有找到错误,命令解析器将源代码细分成多个逻辑单元,比如关键字、标识符以及运算符。接着解析器构建一个内部结构,然后使用这个内部结构描述执行请求操作或从源数据提取请求结果集所需的一系列步骤。如果该批处理包含一个查询,那么这个内部结构被称作一个查询树;如果该批处理包含一个过程,那么他被称为一棵顺序树。
编译:
在这一步中,顺序树被用来生成一个执行计划。优化器模块对可从源表检索信息的各种方法进行分析。它试图寻找一种利用最小资源的最快方法,同时还补充了执行时需要使用的任务列表(例如:检查安全,确认是否强制约束,如果在处理时需要合并的话,还要包含触发器,等等)。结果是一个被称为执行计划的内被结构。
执行:
执行计划存储在过程告诉缓存中,它可以在那里被执行。执行计划中的不同步骤将被发送到关系引擎中的不同模块进行执行;DML管理器、DDL管理器、存储过程管理器、事务处理管理器或实用工具管理器。处理结果将以结果集的形式被收集并发送给调用者。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shaoboyy/archive/2008/11/12/3281634.aspx
页:
[1]