SQL遊標快速上手

來源:互聯網
上載者:User
 問題描述:有以下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  
          給出具體的例子:

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  --刪除遊標

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.