問題描述:有以下2張表,
表A
表B
現在希望得到這樣的數據表A裏的O_Saloary加上表B的A_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
給出具體的例子: