SQL Server游标
程序员文章站
2024-03-15 17:54:24
...
游标的定义是啥子?
标准定义:
游标是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了!再见!!