原文:
sql 游标循环遍历
写存储过程的时候碰到一个需要对数据进行遍历循环操作的问题,最后通过游标解决了,感觉很适用、
1
declare @level varchar(
100
)
2
declare @uid varchar(
100
)
3
declare cur cursor--
定义一个游标
4
read_only
5
for
select
egg_code.user_id,egg_prize_level
6
from
egg_code inner join egg_prize on egg_prize.user_id=egg_code.user_id--
为所获得的数据集指定游标
7
8
open cur--
打开游标
9
fetch next
from
cur into @uid,@level--
把提取操作的列数据放到局部变量中
10
while
(@@fetch_status=
0
)--
返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
11
12
begin
13
--print
'
等级:
'
+@level+
'
--------------用户ID:
'
+
@uid
14
15
update egg_code
set
prize_level=@level
where
user_id=@uid--
执行操作
16
17
--
提前下一位信息
18
fetch next
from
cur into @uid,@level
19
end
20
close cur--
关闭游标
21
deallocate cur--
删除游标
22
go
使用游标的顺序: 声名游标、打开游标、读取数据、关闭游标、删除游标。
由于 @@FETCH_STATUS 对于在一个连接上的所有游标是全局性的,要小心使用 @@FETCH_STATUS 。在执行一条 FETCH 语句后,必须在对另一游标执行另一 FETCH 语句前测试 @@FETCH_STATUS 。在任何提取操作出现在此连接上前,@@FETCH_STATUS 的值没有定义。

