数据库-存储过程-游标-函数
一、存储过程
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
最后要说明的是,小弟初学,哪里有不对的请指出,感激不尽!!!