1)什么是游标?
游标是SQL 的一种数据访问机制。可以将游标简单的看成是查询的结果集的一个指针,可以根据需要在结果集上面来回滚动,浏览需要的数据。
2)游标的优缺点
优点:方便用户对数据库中的数据逐条进行处理
缺点:在进行大数据处理时,效率低下,占用的内存也比较大
3)游标的使用过程
1.声明游标
2.打开游标
3.循环游标
4.关闭游标
5.释放游标
另外,关于 @@FETCH_STATUS:
0 FETCH 语句成功
-1 FETCH 语句失败或此行不在结果集中
-2 被提取的行不存在
4)实例1
首先创建一张客户表(Customers),如图所示:
实现要求:修改消费等级(ConsumeLevel)这个字段,当消费金额(ConsumeAmount)>1000时,等级为高消费,500-1000包含500,不包含1000,等级为中消费,小于500 等级为低消费
代码如下:
--声明游标
declare cur_customer Cursor
for
select ID,ConsumeAmount from Customers
--打开游标
open cur_customer
--通过游标获取数据,ID,ComsumeAmount 取值
declare @id int
declare @Cacount int
fetch next from cur_customer into @id,@Cacount
--循环往下 判断如果有数据
while(@@FETCH_STATUS=0)
begin
--修改消费等级
if(@Cacount<500)
update Customers set ConsumeLevel='低消费' where ID=@id
else if(@Cacount<1000)
update Customers set ConsumeLevel='中消费' where ID=@id
else
update Customers set ConsumeLevel='高消费' where ID=@id
fetch next from cur_customer into @id,@Cacount
end
--关闭游标
close cur_customer
--释放游标
deallocate cur_customer
最终效果如图所示:
5)实例2
首先创建两张表,一张客户表(Customers),同上,一张统计表(TongJi),不插入任何数据
实现要求:做统计报表,统计客户表中每天的消费总金额,将该查询结果,一条条的插入到统计表中
代码如下:
--声明游标
declare cur_tongji Cursor
for
select year(ConsumeTime) 年,MONTH(ConsumeTime) 月,day(ConsumeTime) 日,sum(ConsumeAmount) 总金额
from Customers group by year(ConsumeTime),MONTH(ConsumeTime),day(ConsumeTime)
--打开游标
open cur_tongji
--浏览数据并获取
declare @yy nvarchar(50)
declare @mm nvarchar(50)
declare @dd nvarchar(50)
declare @yye int
fetch next from cur_tongji into @yy,@mm,@dd,@yye
while(@@FETCH_STATUS=0)
begin
insert into TongJi values(@yy,@mm,@dd,@yye)
fetch next from cur_tongji into @yy,@mm,@dd,@yye
end
--关闭游标
close cur_tongji
--释放游标
deallocate cur_tongji
最终效果如图所示:
以上就是游标的介绍与使用