码迷,mamicode.com
首页 > 数据库 > 详细

略谈SQL中的存储过程

时间:2014-05-18 14:08:42      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:sql   数据库管理   数据库存储过程   

对于数据库,一直在增,删,查,改这四个操作中转悠徘徊,没去想太多数据其他的东西。最近发现数据库中等待发现的,等待学习的,等待挖掘的东西太多了。我一直没去搞清楚游标,存储过程以及触发器等等这些知识概念,从没有想过数据库的优化工作和代码简化工作。

之前写了一篇关于数据库的触发器,这一篇主要谈一下数据库的存储过程。


首先SQL Server支持5种类型的存储过程

系统存储过程,本地存储过程,临时存储过程,远程存储过程,扩展存储过程

1.系统存储过程:由系统提供的存储过程,可以作为命令执行各种操作。系统存储过程定义在系统数据库master中,前缀是sp_。

系统存储过程允许系统管理员执行修改系统表的数据库管理任务,可以在任何一个数据库中执行。

2.本地存储过程:本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特定数据库操作任务,其名称不能以sp_为前缀

3.临时存储过程:属于本地存储过程。

如果名称前面有一个"#",该存储过程就称为局部临时存储过程,这种存储过程只能在一个用户会话中使用。

如果名称前面有两个"#",该存储过程就称为全局临时存储过程,这种存储过程可以在所有用户会话中使用。

4.远程存储过程:指从远程服务器上调用的存储过程。

5.扩展存储过程:在SQL环境之外执行的动态链接库称为扩展存储过程,其前缀是sp_。使用是需要加载到SQL系统中,而且按照使用存储过程的方法执行。


其次就是存储过程的定义和执行

用户存储过程只能定义在当前的数据库中,临时存储过程总是在tempdb中创建。

1.定义:语句是create procedure,基本格式为:

create proc 存储过程名

***

***

as <sql语句>[....n]

其中,存储过程必须符合标识符规则,且对于数据库及其所有者必须唯一。

可以在存储过程名之前加上"#"或者"##",从而创建局部或全局临时存储过程。


存储过程中带的参数必须以@符号作为第一个字符来指定参数名称,可以声明一个或者多个参数,也可以为参数指定默认值。

cursor类型只能用于output参数。如果指定参数类型为cursor,则必须同时指定varying和output关键字。


说了这么多,也不想讲那些个概念性的知识了,其实知道怎么用才是王道。

例子一:

use spdg
--检查是否已经存在同名的存储过程,若有,则删除--
if exists (select name from sysobjects
         where name = ‘kh_info‘ and type = ‘p‘)
         drop proceduce kh_info
go
--创建存储过程--
create proceduce kh_info
as 
       select a.客户名称 isnull(数量,0) from khb a


这里定义的存储过程kh_info没有输入和输出参数,不需要与调用者传递数据。

可以使用execute kh_info或者exec kh_info


例子二:

use spdg
if exists (select name form sysobjects
             where name=‘kh_info‘ and type=‘p‘)
     drop proceduce kh_info
go 
create proceduce kh_info
     @khname vachar(20),@spname varchar(50)
as
select x.客户编号,sum(x.数量) as 总数量
    from
        (select a.客户编号 isnull(数量,0) as 数量
             from khb a left join spdgb b
             on a.客户编号 = b.客户编号 left join spb c
             on b.商品编号 = c.商品编号
        where a.客户姓名 = @khname and c.商品名称 = @spname
) x
group by x.客户编号
go


以上存储过程使用两个输入参数:

@khname(用于传入客户姓名)    @spname(用于传入商品名称)


执行方式:

exec kh_info ‘甲‘,‘乙‘

或者exec kh_info @khname=‘甲‘,@spname=‘乙‘

或者exec kh_info @spname=‘乙‘,@khname=‘甲‘

略谈SQL中的存储过程,布布扣,bubuko.com

略谈SQL中的存储过程

标签:sql   数据库管理   数据库存储过程   

原文地址:http://blog.csdn.net/u010792238/article/details/25914085

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!