Procedure 存储过程

本文非原创

存储过程是数据库当中最高级的应用程序,可以传递参数和返回相应的值。

1.分为:系统存储过程和自定义存储过程
定义:它是由一系列的预编译的SQL语句和流程控制语句组成的,
具有参数的传递、条件的判断、变量的声明、返回处理结果,
并扩充了SQL语句的功能。

优点:(1)使用它可以比单独使用SQL语句实现更复杂的功能。

(2)它的执行速度要比普通的SQL语句执行的速度要快。


缺点:(1)不能实现复杂的逻辑操作,因为它不能提供复杂的程序设计。

(2)存储过程创建后,管理较困难,需要记住每个过程的功能。

2.创建存储过程:

创建方式: A.用企业管理器 B.使用代码建立


(1)使用语言创建:

语法: create procedure 存储过程名 [,整数]
[@参数 数据类型] [varying] [=默认值] [output] [n]
[with {recompile / encryption /recompile,encryption}]

例:(1)create procedure st_cus
as
select 顶单好,姓名,踪迹呢,定货日期,踪迹呢
from AA as a join orders as b on a.客户编号=b.可湖编号
where b.货品名称='desk'
go
execute st_cus
go



(2)create procedure st_ord
@goodsname varchar(20)
as
select * from AA as a join orders as b
on a.客户编号=b.可湖编号
where b.货品名称 =@goodsname
go
execute st_ord'desk'
go


说明:1. varying:该参数指定作为输出参数,支持的结果集适用于游标。

2. output:定义一个输出参数,将处理后的信息返回给调用者。

3. 参数:所有数据类型(包括text,ntext,image)均可以作为
存储过程的参数;但cursor数据类型只能用于output
参数,如果指定数据类型为cursor,则必须同时指定
varying和output参数,对cursor型参数个数无限制。

4.局部临时过程:只能创建该过程的连接使用,在会话结束时,
自动除去,加“#”。

全局临时过程:可以由所有连接使用,在使用该过程的最后
一个会话结束时,一般情况是创建该过程的
会话结束,加“##”。


注意:不能把 create procedure 和其它的SQL语句组合
到一个批处理中,不要和系统重名。


执行存储过程:


存储过程的执行可以由应用程序来调用执行,用户可以声明变量和有条件的执行。


1.执行时可以用execute来执行:

语法:execute {[@整数变量=] 存储过程名 [;标识号]}
[@参数名=值/@变量 [output/default]] [,……n]
[with recompile]

例:(1)create procedure st_count
@goodname varchar(20),
@maxdata int output,
@avgprice int output
as
select @maxdata=max(哭春量),@avgprice=avg(价格)
from goods where 货品名称=@goodname
go
declare @aa varchar(20)
declare @bb int
declare @cc int
select @aa='desk'
execute st_count @aa,@bb output,@cc output
select '货品名称'+@aa,'最大货品库存量:'+
cast(@bb as char(6)),'货品平均价格:'+cast(@cc as char(4))

(2) create procedure egg_pro
@name varchar(23)='hh',
@max int output,
@min int output
as
select @max=max(egg_zhong),@min=avg(egg_jia)from egg
where egg_name=@name
go
declare @aa int,@bb int
execute egg_pro @min=@bb output,@max=@aa output,@name=default
print @aa
print @bb

说明:1.整数变量是用来保存过程的返回状态,在使用之前需要声明。

2.参数名:执行时参数赋值的顺序要符合,创建过程顺序相同,
如果采用“@参数名=值”的格式,则所有的参数都
必须使用此种格式,顺序可以和原来不同,如果有
默认值,可以用“default”来调用。

3.参数值:如果给字符型和日期型参数赋值,则要加上单引号。

4.output:指定存储过程的返回参数,返回给调用者。

原文地址:https://www.cnblogs.com/xieyuanzheng/p/5597070.html