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

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

SQL 游標(biāo)學(xué)習(xí)

2019-11-03 08:35:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  問(wèn)題描述:有以下2張表,
      a_id                      a_name               a_salary
Y2007001                     達(dá)哥                   3776
Y2007002                    小杜                    3232
Y2007003                    小胖                    53434
                            表A
      b_id                       b.salary
Y2007001                   467
Y2007002                   532
Y2007003                   987
                            表B
       現(xiàn)在希望得到這樣的數(shù)據(jù)表A里的a_Saloary加上表B的b_Salary是當(dāng)前的總工資,并更新到表A。
       你可以用視圖來(lái),表連接下就可以。
       現(xiàn)在我們考慮下讓SQL自己來(lái)處理,游標(biāo)就是很好的方法。
       
      原理:游標(biāo)就是把數(shù)據(jù)按照指定要求提取出相應(yīng)的數(shù)據(jù)集,然后逐條進(jìn)行數(shù)據(jù)處理。
      1.1游標(biāo)的概念
       游標(biāo)(Cursor)它使用戶可逐行訪問(wèn)由SQL Server返回的結(jié)果集。使用游標(biāo)(cursor)的一個(gè)主要的原因就是把集合操作轉(zhuǎn)換成單個(gè)記錄處理方式。用SQL語(yǔ)言從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)后,結(jié)果放在內(nèi)存的一塊區(qū)域中,且結(jié)果往往是一個(gè)含有多個(gè)記錄的集合。游標(biāo)機(jī)制允許用戶在SQL server內(nèi)逐行地訪問(wèn)這些記錄,按照用戶自己的意愿來(lái)顯示和處理這些記錄。
       1.2 游標(biāo)的優(yōu)點(diǎn)
      從游標(biāo)定義可以得到游標(biāo)的如下優(yōu)點(diǎn),這些優(yōu)點(diǎn)使游標(biāo)在實(shí)際應(yīng)用中發(fā)揮了重要作用:
        1)允許程序?qū)τ刹樵冋Z(yǔ)句select返回的行集合中的每一行執(zhí)行相同或不同的操作,而不是對(duì)整個(gè)行集合執(zhí)行同一個(gè)操作。
        2)提供對(duì)基于游標(biāo)位置的表中的行進(jìn)行刪除和更新的能力。
        3)游標(biāo)實(shí)際上作為面向集合的數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)和面向行的程序設(shè)計(jì)之間的橋梁,使這兩種處理方式通過(guò)游標(biāo)溝通起來(lái)。
       1.3 游標(biāo)的使用
講了這個(gè)多游標(biāo)的優(yōu)點(diǎn),現(xiàn)在我們就親自來(lái)揭開游標(biāo)的神秘的面紗。
使用游標(biāo)的順序: 聲名游標(biāo)、打開游標(biāo)、讀取數(shù)據(jù)、關(guān)閉游標(biāo)、刪除游標(biāo)。
       1.3.1聲明游標(biāo)
       最簡(jiǎn)單游標(biāo)聲明:DECLARE <游標(biāo)名>CURSOR FOR<SELECT語(yǔ)句>;
       其中select語(yǔ)句可以是簡(jiǎn)單查詢,也可以是復(fù)雜的接連查詢和嵌套查詢

       1.3.2 打開游標(biāo)
       非常簡(jiǎn)單,我們就打開剛才我們聲明的游標(biāo)mycursor
       OPEN mycursor       
       1.3.3讀取數(shù)據(jù)
        FETCH [ NEXT | PRIOR | FIRST | LAST] FROM { 游標(biāo)名  | @游標(biāo)變量名 } [ INTO @變量名 [,…] ]
        參數(shù)說(shuō)明:
        NEXT   取下一行的數(shù)據(jù),并把下一行作為當(dāng)前行(遞增)。由于打開游標(biāo)后,行指針是指向該游標(biāo)第1行之前,所以第一次執(zhí)行FETCH NEXT操作將取得游標(biāo)集中的第1行數(shù)據(jù)。NEXT為默認(rèn)的游標(biāo)提取選項(xiàng)。
        INTO @變量名[,…]  把提取操作的列數(shù)據(jù)放到局部變量中。
        列表中的各個(gè)變量從左到右與游標(biāo)結(jié)果集中的相應(yīng)列相關(guān)聯(lián)。
        各變量的數(shù)據(jù)類型必須與相應(yīng)的結(jié)果列的數(shù)據(jù)類型匹配或是結(jié)果列數(shù)據(jù)類型所支持的隱性轉(zhuǎn)換。變量的數(shù)目必須與游標(biāo)選擇列表中的列的數(shù)目一致。        
        1.3.4關(guān)閉游標(biāo)
        CLOSE mycursor              
        1.3.5刪除游標(biāo)
        DEALLOCATE mycursor  

實(shí)例1

declare @id nvarchar(20)  --定義變量來(lái)保存ID號(hào)
declare @A float                  --定義變量來(lái)保存值
declare mycursor cursor for select * from tb_c   --為所獲得的數(shù)據(jù)集指定游標(biāo)
open mycursor                   --打開游標(biāo)
fetch next from mycursor  into @id,@A   --開始抓第一條數(shù)據(jù)
while(@@fetch_status=0)     --如果數(shù)據(jù)集里一直有數(shù)據(jù)
begin
select tb_b.name,(tb_b.gz + @A) from tb_b where tb_b.id = @id   --開始做想做的事(什么更新呀,刪除呀)
        fetch next from mycursor into @id,@A     --跳到下一條數(shù)據(jù)
end
close mycursor        --關(guān)閉游標(biāo)
deallocate mycursor  --刪除游標(biāo)
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐山市| 湘潭市| 沛县| 阳曲县| 昌乐县| 韶山市| 九台市| 吴忠市| 荣昌县| 永川市| 莱阳市| 瑞丽市| 汾西县| 北票市| 九龙坡区| 繁昌县| 广州市| 象州县| 三亚市| 正镶白旗| 玛曲县| 蒙自县| 株洲县| 梅河口市| 来宾市| 潢川县| 浦东新区| 孙吴县| 射阳县| 禄丰县| 台南市| 阿瓦提县| 扶沟县| 正镶白旗| 右玉县| 内丘县| 玛曲县| 融水| 莱阳市| 渑池县| 敦煌市|