国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

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  --刪除游標
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌拉特中旗| 宜良县| 扬州市| 盐山县| 寿光市| 滨州市| 平阳县| 洛川县| 郎溪县| 南漳县| 合山市| 巫溪县| 安阳县| 德州市| 禹城市| 普宁市| 洛宁县| 遂川县| 墨脱县| 奉贤区| 东光县| 错那县| 永年县| 肃北| 屏南县| 揭东县| 上林县| 安化县| 贵州省| 武山县| 宁城县| 临洮县| 南华县| 绿春县| 浦城县| 遂川县| 资源县| 万州区| 仲巴县| 陆河县| 柘荣县|