欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL Server游标

程序员文章站 2024-03-15 17:54:24
...

游标的定义是啥子?

标准定义:

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

我的定义:

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

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

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

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

实例

这是books表结构????
SQL Server游标
这是books表数据,先把level这条字段看为空(看不见看不见你????)????
SQL Server游标

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了!再见!!

相关标签: sql