寫存儲過程的時候碰到一個須要對數據進行遍歷循環操做的問題,最後經過遊標解決了,感受很適用、測試
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