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 的值沒有定義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM