原文:
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 的值没有定义。