游标对查询出来的结果集作为一个单元来有效的处理,游标可以定位在结果集的特定行、从结果集的当前位置检索一行或多行、可以对结果集中当前位置的数据进行修改。
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字,可以用fetch 语句逐一从游标中获取记录,并赋给变量,对游标中的数据进行依次读取处理。
显然,使用游标可以对数据集进行循环处理,在一些特定的情况下,是非常有作用的,但是游标存在效率问题,特别是存储数据量比较大时;
在具体应用中,如果数据表中有几十万或者更大量的数据时,游标的效率是要考虑的。
因为游标相当于在这么大的表中不停地查找,直到你想要的结果,实际上与你一个特征一个特征地取数据是一样的,只是那样子你也穷举无数种可能,而游标在这种情况下会按一种你定义的规则自动进行。
例:
declare @id nvarchar(20) --定义变量来保存ID号
declare @A float --定义变量来保存值
declare mycursor cursor for select * from tb_c --为所获得的数据集指定游标
open mycursor --打开游标
fetch next from mycursor into @id,@A --开始抓第一条数据
while(@@fetch_status=0) --如果数据集里一直有数据
begin
select tb_b.name,(tb_b.gz + @A) from tb_b where tb_b.id = @id --开始做想做的事(什么更新呀,删除呀)
fetch next from mycursor into @id,@A --跳到下一条数据
end
close mycursor --关闭游标
deallocate mycursor --删除游标
fetch next from mySet
end
close mySet
deallocate mySet