<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        sqlserver中游標的認識

        來源:懂視網 責編:小采 時間:2020-11-09 13:53:23
        文檔

        sqlserver中游標的認識

        sqlserver中游標的認識:一、遇到的問題 實際上,也不算什么太大的問題O(_)O:我們有時候可能希望在批處理或者存儲過程中直接對select結果集進行加工 ,這個時候,我們需要一種能夠讓我們逐條處理每一行記錄 的數據庫對象。 二、游標的概念 解決上面的問題,我們可以使用一種叫做游
        推薦度:
        導讀sqlserver中游標的認識:一、遇到的問題 實際上,也不算什么太大的問題O(_)O:我們有時候可能希望在批處理或者存儲過程中直接對select結果集進行加工 ,這個時候,我們需要一種能夠讓我們逐條處理每一行記錄 的數據庫對象。 二、游標的概念 解決上面的問題,我們可以使用一種叫做游

        一、遇到的問題 實際上,也不算什么太大的問題O(_)O:我們有時候可能希望在批處理或者存儲過程中直接對select結果集進行加工 ,這個時候,我們需要一種能夠讓我們逐條處理每一行記錄 的數據庫對象。 二、游標的概念 解決上面的問題,我們可以使用一種叫做游

          一、遇到的問題

          實際上,也不算什么太大的問題O(∩_∩)O:我們有時候可能希望在批處理或者存儲過程中直接對select結果集進行加工 ,這個時候,我們需要一種能夠讓我們逐條處理每一行記錄 的數據庫對象。

          二、游標的概念

          解決上面的問題,我們可以使用一種叫做“游標”的數據庫對象。

          游標(Cursor) 可以看做一種數據類型,它可以用來遍歷結果集,相當于指針,或者是數組中的下標。它處理結果集的方法有以下幾種:

          定位到結果集的某一行

          從當前結果集的位置搜索一行或一部分行

          對結果集中的當前行進行數據修改

          三、游標的使用方法(創建、打開、讀取、關閉、刪除)

          【創建游標】

          和定義各種數據類型的方法有點像,但是注意,不要加“@”(實際上也有“游標類型的變量”,和“游標”的用法幾乎完全相同,而且定義時使用@符號)。下面是定義游標的語句:

          declare 游標名 cursor [local|global] [forward_only|scroll]

          for

          select查詢語句

          游標分為局部游標和全局游標兩種,local表示局部游標,global表示全局游標(默認值,,可以省略)。當指定forward_only(默認值,可以省略)時,游標是只進的,也就是說只能從頭到尾地提取記錄,如果需要在行之間來回跳躍,需要指定為scroll。

          【使用游標】

          只創建游標但是不使用它,就沒有任何意義了。下面我們先舉個最簡單的例子來演示創建好游標之后的幾步使用過程:

          --【創建游標】

          declare C1 cursor for select xingming from yiren

          declare @xingming varchar(20)

          --【打開游標】

          open C1

          --【讀取游標】

          fetch next from C1 into @xingming --while的特點就是要先寫一次

          while(@@FETCH_STATUS=0)

          begin

          print '姓名:'+@xingming

          fetch next from C1 into @xingming

          end

          --【關閉游標】

          close C1

          --【刪除游標】

          deallocate C1

          游標的使用方法是不是和Java中的 whle(rs.next()){}很像呢?實際上rs.next()執行時就直接在結果集中向后移動一條了,如果沒有到達結果集的末端,仍然會執行循環體。在這里使用游標也是一樣,@@FETCH_STATUS的值為0時,游標尚未走到結尾。當它不為0了,游標就走到了結尾,將退出循環。

          fetch next from 游標名 into 變量名列表 是一種固定形式的讀取游標內容的方法。當查詢語句選擇了多個字段的時候,讀取時也需要借助這句話向多個變量賦值。于是寫成變量名列表。

          【全局游標和scroll游標】

          前面提到全局游標和scroll游標,下面舉個例子:

          if(CURSOR_STATUS('global','CURSOR_2')!=-3) deallocate CURSOR_2

          declare CURSOR_2 cursor scroll --全局的scroll游標

          for select xingming,nicheng,xingbie from yiren

          --第一個T-SQL批開始

          open CURSOR_2

          declare @seq int,

          @xingming varchar(20),@nicheng varchar(50),@xingbie nchar

          set @seq=4

          fetch absolute @seq from CURSOR_2 into @xingming,@nicheng,@xingbie

          if(@@FETCH_STATUS=0)

          begin

          print '第'+cast(@seq as varchar)+'個藝人是:'+@xingming

          print case @xingbie when '男' then '他' when '女' then '她' end

          +'的昵稱是:'+@nicheng

          end

          close CURSOR_2

          go

          --第二個T-SQL批開始

          open CURSOR_2

          declare @seq int,

          @xingming varchar(20),@nicheng varchar(50),@xingbie nchar

          set @seq=5 --分成了兩個批,需要再次定義@seq

          fetch absolute @seq from CURSOR_2 into @xingming,@nicheng,@xingbie

          if(@@FETCH_STATUS=0)

          begin

          print '第'+cast(@seq as varchar)+'個藝人是:'+@xingming

          print case @xingbie when '男' then '他' when '女' then '她' end

          +'的昵稱是:'+@nicheng

          end

          close CURSOR_2

          go

          --在第三個批中刪除游標

          deallocate CURSOR_2

          當開啟了scroll選項后,fetch可以用于讀next(后移)、prior(前移)、first(第一行)、last(最后一行)、absolute(以數值定位到絕對行)、relative(以數值定位到相對行) 。

          全局游標一旦被定義就會一直存在,所以每個批處理都能看到它。直到使用deallocate來刪除它,它才會消失。CURSOR_STATUS('global','CURSOR_2')可以檢查它的狀態。

          【游標的嵌套】

          由于大大影響系統性能,簡單了解一下即可。

          if(CURSOR_STATUS('global','CURSOR_3')!=-3) deallocate CURSOR_3

          declare CURSOR_3 cursor for

          select yanchuid from yanchu

          open CURSOR_3

          declare @ycid int

          fetch next from CURSOR_3

          into @ycid

          while(@@FETCH_STATUS=0)

          begin

          print '參加第'+cast(@ycid as varchar)+'次演出的藝人是:'

          declare CURSOR_4 cursor for

          select xingming from yiren where yirenid in

          (select yirenid from yanchuyiren where yanchuid=@ycid)

          --這句使用了子查詢,實際上可以再嵌套一個游標

          declare @xingming varchar(50)

          open CURSOR_4

          fetch next from CURSOR_4 into @xingming

          while(@@FETCH_STATUS=0)

          begin

          print @xingming

          fetch next from CURSOR_4 into @xingming

          end

          close CURSOR_4

          deallocate CURSOR_4

          fetch next from CURSOR_3

          into @ycid

          print ''

          end

          close CURSOR_3

          deallocate CURSOR_3

          【游標變量】

          游標變量是真正的把游標當做數據類型來使用的一種方法,游標變量和游標對象的區別就在于是否有@。創建游標變量的時候,首先declare @游標變量名 cursor,然后set @游標變量名=cursorfor select語句。

          declare @c1 CURSOR

          set @c1=cursor for select xingming from yiren

          open @c1

          declare @xingming varchar(50)

          fetch next from @c1 into @xingming

          print @xingming

          close @c1

          deallocate @c1

          四、游標的注意事項

          【游標的缺點】

          使用游標會把結果集一條條取出來處理,增加了服務器的負擔,再者使用游標的效率遠遠沒有使用默認結果集的效率高。所以,能不用游標就盡量不要用。

          【游標的補充說明】

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        sqlserver中游標的認識

        sqlserver中游標的認識:一、遇到的問題 實際上,也不算什么太大的問題O(_)O:我們有時候可能希望在批處理或者存儲過程中直接對select結果集進行加工 ,這個時候,我們需要一種能夠讓我們逐條處理每一行記錄 的數據庫對象。 二、游標的概念 解決上面的問題,我們可以使用一種叫做游
        推薦度:
        標簽: 了解 sql 認識
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲自偷自偷精品| 亚洲精品自在在线观看| 亚洲国产成人综合| 午夜无码A级毛片免费视频 | 亚洲av无码专区在线观看亚| 久久精品无码一区二区三区免费| 67194在线午夜亚洲| 成人在线视频免费| 亚洲精品成a人在线观看夫| 国外成人免费高清激情视频| 在线观看免费亚洲| 精品亚洲成α人无码成α在线观看 | 成人婷婷网色偷偷亚洲男人的天堂 | 三年片免费高清版| 亚洲AV无码一区东京热久久 | 黄色网站软件app在线观看免费| 亚洲日韩欧洲乱码AV夜夜摸| 久久免费的精品国产V∧| 亚洲免费福利视频| 人人狠狠综合久久亚洲高清| 中文在线观看免费网站| 亚洲一区二区影院| 天天干在线免费视频| 精品熟女少妇aⅴ免费久久| 亚洲精品自产拍在线观看动漫| 全免费毛片在线播放| 18禁亚洲深夜福利人口| 亚洲AV无码一区二区三区系列| 免费观看激色视频网站(性色)| 亚洲精品无码国产片| 亚洲免费人成在线视频观看| 成人女人A级毛片免费软件| 偷自拍亚洲视频在线观看99| 亚洲妇熟XXXX妇色黄| 啦啦啦高清视频在线观看免费| 暖暖免费中文在线日本| 久久精品亚洲一区二区三区浴池 | 亚洲香蕉网久久综合影视| 国产大片91精品免费观看不卡| 精品国产亚洲一区二区三区在线观看 | 国产免费久久精品99久久|