概述
游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。
游标的使用场景
我们平常对数据库中的数据进行增删改时,都是一次性处理若干行符合指定条件的数据,而如果有个业务场景,要求我们对某些数据逐行进行判断并采取不同的方式处理,这时候一般的语句就满足不了了.
游标可以方便从一个结果集中进行循环遍历数据在进行操作。它的思想就是从结果集中,一个一个取出来处理.当然,由于它是逐一处理的方式,游标的最大弊端就是低效。
实例
新建一张表作为练习:
字段名 | 字段类型 | 字段含义 |
---|---|---|
ID | int | |
Name | nvarchar(50) | |
price | int | 价格 |
levels | nvarchar(4) | 等级 |
模拟需求:
根据价格设置书的等级,价格小于50便宜
价格 50-100中等
价格大于100的贵
--11.游标是什么?
--游标是SQL 的一种数据访问机制。可以将游标简单的看成是查询的结果集的一个指针,
--可以根据需要在结果集上面来回滚动,浏览需要的数据。
--根据价格设置书的等级,价格小于50便宜
--价格 50-100中等
--价格大于100的贵
--定义一个游标
declare cur_Set_Lve cursor
for
select id,Price from Books
--打开游标
open cur_Set_Lve
declare @id int
declare @price decimal(18,0)
--获取数据 id,Price
fetch next from cur_Set_Lve into @id,@price
print @id
print @price
--循环获取
while(@@FETCH_STATUS=0)
--@@fetch_status是MicroSoft SQL SERVER的一个全局变量
--其值有以下三种,分别表示三种不同含义:【返回类型integer】
--0 FETCH 语句成功
---1 FETCH 语句失败或此行不在结果集中
---2 被提取的行不存在
begin
if(@price<50)
begin
update [dbo].[Books] set Levels='便宜' where ID=@id
end
else if(@price<100)
begin
update [dbo].[Books] set Levels='中等' where ID=@id
end
else
begin
update [dbo].[Books] set Levels='贵' where ID=@id
end
end
--关闭游标
close cur_Set_Lve
--释放游标
--deallocate