数据库-存储过程-游标-函数

一、存储过程
   SQL99标准提出的SQL-invoked-rountines的概念,它开分为存储过程与函数,这里首先介绍存储过程
   存储过程分为三类:系统存储过程(如:sp_help)、自定义存储过程、扩展存储过程
   存储过程可以理解为一个SQL语句块,完成一些复杂的功能,当然可以包含应用程序的业务,比如:分页,生成订单号等,存储过程可以接收应用程序传递的参数,并将查询的结果返回给应用程序
  1、存储过程的优点:
    1)、运行效率高,因为存储过程不会在每一次调用时都解释执行,随便说一句,SQL执行后的执行计划会放在缓存中,这样下一次相同的SQL执行就不用再次优化了,从而加快速度
    2)、存储过程降低了客户机与服务器的通信量,使用存储过程,就不用在应程序中拼SQL传回服务器,只须要存储过程名与参数就可以了
    3)、方便实施企业规则,可以在存储过程里加入业务逻辑
  2、存储过程的使用(重复使用)
    创建:

  create proc pc_whc
   as
   select * from whc
   /*执行*/
   exec pc_whc

二、游标
    游标可以理解为一个"指针",其指向的是一条记录,当用select语句得到一个结果集时,我们可以将它放到一个游标中,然后通过移动游标来读取每一条数据,并进行处理,感觉有点"遍历"数据
游标的使用:
1、 定义游标:declare cursor_name cursor
                   For select 语句;
2、 打开游标:open cursor_name
3、 循环访问游标中的每一行数据:
Fetch next from cursor_name into @参数列表
4、 游标的状态:@@fetch_status,用于判断游标fetch的状态,当为0时正常,不为一时异常
5、关闭并释放资源
例:

declare @whcId nchar(5),@whc int;
/*定义一个游标*/
declare whc_cursor cursor 
for select CustomerID,EmployeeID from dbo.Orders
/*打开一个游标*/
open whc_cursor
/*移动指针,将数据放到变量中*/
fetch next from whc_cursor into @whcId,@whc
while @@fetch_status = 0
begin 
 print @whcid+' '+convert(nchar(5),@whc)
fetch next from whc_cursor  into @whcId,@whc
end
close whc_cursor
deallocate whc_cursor

三、函数
函数相信大家都很清楚了,传递参数,然后返回一个结果,SQL中的函数也大致差不多,返回时使用ruturn,可以是int、varchar,table等类型,有了函数就可以把一些功能在一起,比如对数据的处理等
函数的创建(例子说明):

create function fun_whc(
@str varchar(50)
)
returns varchar(100)
as
begin 
   declare @List varchar(200) 
   set @List=@str+'My friend'
--返回值
   return @List
end
--调用
select DemoName,dbo.fun_whc(DemoName) from whc

  最后要说明的是,小弟初学,哪里有不对的请指出,感激不尽!!!

 

posted @ 2011-09-25 19:49  静悦  阅读(2649)  评论(4编辑  收藏  举报