如果對數(shù)據(jù)進行遍歷循環(huán)操作,通過 SQL 的游標就可以實現(xiàn),下面就為您詳細介紹該方法,供您參考,希望對您學習SQL數(shù)據(jù)庫能夠有所幫助。
SQL游標的優(yōu)點是可以方便從一個結(jié)果集中進行循環(huán)遍歷數(shù)據(jù)在進行操作。
1、游標允許應(yīng)用程序?qū)Σ樵冋Z句select 返回的行結(jié)果集中每一行進行相同或不同的操作,而不是一次對整個結(jié)果集進行同一種操作;
2、它還提供對基于游標位置而對表中數(shù)據(jù)進行刪除或更新的能力;
3、游標把作為面向集合的數(shù)據(jù)庫管理系統(tǒng)和面向行的程序設(shè)計兩者聯(lián)系起來,使兩個數(shù)據(jù)處理方式能夠進行溝通。?
???????然而游標也有缺點——復雜和低效,是游標的最大缺點,也是致使很多時候在使用存儲過程中沒有想到游標的主要原因。
1 -- 將book表中的LookCount(int型)字段加上800-1000的隨機整數(shù) 2 declare @bid int 3 declare cur cursor 4 read_only 5 for select bid from dbo.Book 6 open cur 7 fetch next from cur into @bid 8 while ( @@fetch_status = 0 ) 9 begin 10 update dbo.Book set LookCount = LookCount + cast (( rand () * ( 1000 - 800 ) + 800 ) as int ) where bid = @bid 11 fetch next from cur into @bid 12 end 13 close cur 14 deallocate cur
?
使用游標的順序: 聲名游標、打開游標、讀取數(shù)據(jù)、關(guān)閉游標、刪除游標。
由于 @@FETCH_STATUS 對于在一個連接上的所有游標是全局性的,要小心使用 @@FETCH_STATUS 。在執(zhí)行一條 FETCH 語句后,必須在對另一游標執(zhí)行另一 FETCH 語句前測試 @@FETCH_STATUS 。在任何提取操作出現(xiàn)在此連接上前,@@FETCH_STATUS 的值沒有定義。
例如,用戶從一個游標執(zhí)行一條 FETCH 語句,然后調(diào)用一個存儲過程,此存儲過程打開并處理另一個游標的結(jié)果。當控制從被調(diào)用的存儲過程返回后,@@FETCH_STATUS 反映的是在存儲過程中執(zhí)行的最后的 FETCH 語句的結(jié)果,而不是在存儲過程被調(diào)用之前的 FETCH 語句的結(jié)果。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
