SQL利用游標遍歷所有數據並更新所有數據


如果對數據進行遍歷循環操作,通過SQL的游標就可以實現,下面就為您詳細介紹該方法,供您參考,希望對您學習SQL數據庫能夠有所幫助。

SQL游標的優點是可以方便從一個結果集中進行循環遍歷數據在進行操作。
1、游標允許應用程序對查詢語句select 返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;
2、它還提供對基於游標位置而對表中數據進行刪除或更新的能力;
3、游標把作為面向集合的數據庫管理系統和面向行的程序設計兩者聯系起來,使兩個數據處理方式能夠進行溝通。 
       然而游標也有缺點——復雜和低效,是游標的最大缺點,也是致使很多時候在使用存儲過程中沒有想到游標的主要原因。

 1 --將book表中的LookCount(int型)字段加上800-1000的隨機整數
 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

 

使用游標的順序: 聲名游標、打開游標、讀取數據、關閉游標、刪除游標。
由於 @@FETCH_STATUS 對於在一個連接上的所有游標是全局性的,要小心使用 @@FETCH_STATUS 。在執行一條 FETCH 語句后,必須在對另一游標執行另一 FETCH 語句前測試 @@FETCH_STATUS 。在任何提取操作出現在此連接上前,@@FETCH_STATUS 的值沒有定義。
例如,用戶從一個游標執行一條 FETCH 語句,然后調用一個存儲過程,此存儲過程打開並處理另一個游標的結果。當控制從被調用的存儲過程返回后,@@FETCH_STATUS 反映的是在存儲過程中執行的最后的 FETCH 語句的結果,而不是在存儲過程被調用之前的 FETCH 語句的結果。


免責聲明!

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



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