SQL 游標學習
2024-07-21 02:44:54
供稿:網友
問題描述:有以下2張表,
a_id a_name a_salary
Y2007001 達哥 3776
Y2007002 小杜 3232
Y2007003 小胖 53434
表A
b_id b.salary
Y2007001 467
Y2007002 532
Y2007003 987
表B
現在希望得到這樣的數據表A里的a_Saloary加上表B的b_Salary是當前的總工資,并更新到表A。
你可以用視圖來,表連接下就可以。
現在我們考慮下讓SQL自己來處理,游標就是很好的方法。
原理:游標就是把數據按照指定要求提取出相應的數據集,然后逐條進行數據處理。
1.1游標的概念
游標(Cursor)它使用戶可逐行訪問由SQL Server返回的結果集。使用游標(cursor)的一個主要的原因就是把集合操作轉換成單個記錄處理方式。用SQL語言從數據庫中檢索數據后,結果放在內存的一塊區域中,且結果往往是一個含有多個記錄的集合。游標機制允許用戶在SQL server內逐行地訪問這些記錄,按照用戶自己的意愿來顯示和處理這些記錄。
1.2 游標的優點
從游標定義可以得到游標的如下優點,這些優點使游標在實際應用中發揮了重要作用:
1)允許程序對由查詢語句select返回的行集合中的每一行執行相同或不同的操作,而不是對整個行集合執行同一個操作。
2)提供對基于游標位置的表中的行進行刪除和更新的能力。
3)游標實際上作為面向集合的數據庫管理系統(RDBMS)和面向行的程序設計之間的橋梁,使這兩種處理方式通過游標溝通起來。
1.3 游標的使用
講了這個多游標的優點,現在我們就親自來揭開游標的神秘的面紗。
使用游標的順序: 聲名游標、打開游標、讀取數據、關閉游標、刪除游標。
1.3.1聲明游標
最簡單游標聲明:DECLARE <游標名>CURSOR FOR<SELECT語句>;
其中select語句可以是簡單查詢,也可以是復雜的接連查詢和嵌套查詢
1.3.2 打開游標
非常簡單,我們就打開剛才我們聲明的游標mycursor
OPEN mycursor
1.3.3讀取數據
FETCH [ NEXT | PRIOR | FIRST | LAST] FROM { 游標名 | @游標變量名 } [ INTO @變量名 [,…] ]
參數說明:
NEXT 取下一行的數據,并把下一行作為當前行(遞增)。由于打開游標后,行指針是指向該游標第1行之前,所以第一次執行FETCH NEXT操作將取得游標集中的第1行數據。NEXT為默認的游標提取選項。
INTO @變量名[,…] 把提取操作的列數據放到局部變量中。
列表中的各個變量從左到右與游標結果集中的相應列相關聯。
各變量的數據類型必須與相應的結果列的數據類型匹配或是結果列數據類型所支持的隱性轉換。變量的數目必須與游標選擇列表中的列的數目一致。
1.3.4關閉游標
CLOSE mycursor
1.3.5刪除游標
DEALLOCATE mycursor
實例1
declare @id nvarchar(20) --定義變量來保存ID號
declare @A float --定義變量來保存值
declare mycursor cursor for select * from tb_c --為所獲得的數據集指定游標
open mycursor --打開游標
fetch next from mycursor into @id,@A --開始抓第一條數據
while(@@fetch_status=0) --如果數據集里一直有數據
begin
select tb_b.name,(tb_b.gz + @A) from tb_b where tb_b.id = @id --開始做想做的事(什么更新呀,刪除呀)
fetch next from mycursor into @id,@A --跳到下一條數據
end
close mycursor --關閉游標
deallocate mycursor --刪除游標