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. 与视图的比较

  1. 本质不同
    游标是作为指针操作,视图是作为数据库对象;
  2. 占用资源
    游标多,视图少;
  3. 工作方式
    游标:行处理,视图:一整个表(查询结果)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值