SQL Server游标

标签: sql

游标的定义是啥子?

标准定义:

游标是SQL 的一种数据访问机制。可以将游标简单的看成是查询的结果集的一个指针,可以根据需要在结果集上面来回滚动,浏览需要的数据。

我的定义:

使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。
把表比作一栋房子,把表中的数据比作居住在房子里的人。每个房子不可能只有客厅,必须有厕所,卧室等。

把游标比作厕所,第一个人(小王)进去了,后面的人就不能进了(当然,你要是能挤一挤我是无话可说的),此时“厕所”的状态就是小王正在上厕所,只有等小王上完厕所(处理完数据)之后下个人才可以继续上,可以插队(使用限制语句),按照用户自己的意愿来插队(显示和处理这些记录),这就是游标(厕所)的定义:用来把集合操作变成单个处理方式。

缺点就是慢!上厕所的时间不可能固定,说不定玩会手机,刷个抖音,别人就炸了。

优点也是有的,举一个例子:
小王上厕所出来了,第二个人(老二)是想上小便,而第三个人(小三)是想开大,此时他们俩通过沟通,老二让小三先去,这样是可以的。这就是允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作

实例

这是books表结构👇
在这里插入图片描述
这是books表数据,先把level这条字段看为空(看不见看不见你👀)👇
在这里插入图片描述

1.定义游标

--declare 游标名 cursor for sql语句
declare cur_books cursor 
for 
select id,price from books

2.打开游标

--这不用多说了吧?
open cur_books

3.获取数据

--获取数据ID,PRICE
DECLARE @ID INT--定义一个变量用来接收id
DECLARE @PRICE DECIMAL(18,0)--定义一个变量用来接收price
FETCH NEXT FROM cur_books INTO @ID,@PRICE

4.循环获取

--循环获取数据
--如果price小于50为便宜
--大于等于50且小于100为中等
--大于等于100为贵
--并更改他的level字段
WHILE(@@FETCH_STATUS=0)
BEGIN
 IF(@PRICE<50)
 UPDATE BOOKS SET Level='便宜' WHERE ID=@ID
 ELSE IF(@PRICE<100)
 UPDATE BOOKS SET Level='中等' WHERE ID=@ID
 ELSE
 UPDATE BOOKS SET Level='贵' WHERE ID=@ID
 FETCH NEXT FROM cur_books INTO @ID,@PRICE
END

5.关闭并释放游标

--关闭游标
CLOSE cur_books
--释放游标
DEALLOCATE cur_books

--不释放游标的话,在某些场合下会导致代码出错,想详细了解建议百度

好了,游标就讲到这,我去WC了!再见!!

版权声明:本文为MrLsir_m原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/MrLsir_m/article/details/106337812