問題描述:有以下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語句可以是簡單查詢,也可以是複雜的接連查詢和巢狀查詢
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
給出具體的例子:
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 --跳到下一條資料
endclose mycursor --關閉游標
deallocate mycursor --刪除游標
SQL游標快速上手
問題描述 有以下2張表,表a表b現在希望得到這樣的資料表a裡的o saloary加上表b的a salary是當前的總工資,並更新到表a。你可以用檢視來,表連線下就可以。現在我們考慮下讓sql自己來處理,游標就是很好的方法。原理 游標就是把資料按照指定要求提取出相應的資料集,然後逐條進行資料處理。1....
儲存過程 SQL 快速上手。
一 sql儲存過程的概念,優點及語法 整理在學習程式過程之前,先了解下什麼是儲存過程?為什麼要用儲存過程,他有那些優點 定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令...
ibatis 快速上手
簡介 例子 現在我們我們通過乙個簡單的案例,了解如何通過ibatis解決資料訪問問題。現在有有乙個資料庫,資料庫裡面有一張人員資訊表 需求是這樣 通過乙個web應用程式顯示人員資訊表裡面的資訊,並且可以新增 修改 刪除人員記錄 乙個並不複雜的案例,但是它覆蓋所有開發首先要學習的內容。第1步 the ...