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

相關文章
相關標籤/搜索