SQL Server学习笔记——游标
Posted Aiden_Zhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server学习笔记——游标相关的知识,希望对你有一定的参考价值。
SQL Server学习笔记——游标
1. 游标基本介绍
定义:用来操作查询结果集,是一个用户数据缓冲区。
优点:保存查询结果,以便以后使用。游标的结果集是的select执行结果,需要的时候,只需要一次,不用重复查询。
缺点:数据缓冲区,如果游标数据量大则会造成内存不足。所以,在数据量小时才使用游标。
语法
游标名 cursor for select ...
步骤
- 声明游标
- 打开游标
- 取数据(循环)
- 关闭游标 或者 deallocate
举个栗子:
查询major表中的mname数据,major表里面的数据有:
--声明游标
declare my_cursor cursor for select mname from major
declare @mname varchar(30) -声明变量,用于存储取出来的数据
--打开游标
open my_cursor
--取数据(循环)
fetch next from my_cursor into @mname
while @@FETCH_STATUS=0 --循环结束条件
begin
select @mname as 'mname'
fetch next from my_cursor into @mname
end
--关闭游标 或者 deallocate
deallocate my_cursor
查询结果为:
2. 举个例子
要求:对sc表添加一个等级列,若学生成绩80及以上,设为等级A,70-79分为B,其余为C,null仍为null。
首先在sc表中新建一个名为sc_rank的列:
插入sc_rank之后的sc表:
SQL语句如下:
--声明游标
declare my_cursor cursor for select sno, cno, grade from sc
declare @sno varchar(30)
declare @cno varchar(30)
declare @grade decimal
--打开游标
open my_cursor
--取数据(循环)
fetch next from my_cursor into @sno, @cno, @grade
while @@FETCH_STATUS=0
begin
if @grade >= 80
update sc set sc_rank = 'A' where cno = @cno and sno = @sno
else if @grade >= 70
update sc set sc_rank = 'B' where cno = @cno and sno = @sno
else if @grade >= 0 --不能直接使用else,因为grade为null时,sc_rank也设为null
update sc set sc_rank = 'C' where cno = @cno and sno = @sno
fetch next from my_cursor into @sno, @cno, @grade
end
--关闭游标 或者 deallocate
deallocate my_cursor
执行之后的结果:
3. 与视图的比较
- 本质不同
游标是作为指针操作,视图是作为数据库对象; - 占用资源
游标多,视图少; - 工作方式
游标:行处理,视图:一整个表(查询结果)
以上是关于SQL Server学习笔记——游标的主要内容,如果未能解决你的问题,请参考以下文章
数据库原理与应用(SQL Server)笔记 第十一章 游标