Transact-SQL 遊標

Transact-SQL 遊標
(從訪問量上來看 ,本文是blog裏每天最受關注的了,想到我當時搜索相關問題時,有用的資料確實很少,走了很 多彎路,所以重新整理編輯了一下,希望對您學習和理解遊標有所幫助)

一,遊標的 作用:

    當在存儲過程,函數,批處理,觸發器中 使用 select 返回多條記錄時,遊標提供了一個可以對記錄進行逐條處理的 方法.

二,遊標的使用方法:

1,使用Declare Cursor語句,根據Select語句創建遊標.

    有兩種操作方法,效果是一樣的,請注意他們的區別 :
          第一種:聲明變量,然後設置遊標
             Declare @MyVariable Cursor                --聲明@MyVariable 這個變量

             Set @MyVariable =Cursor For                --根據select創建遊標的固定用法
             SELECT id,name FROM usertable     

           第二種:聲明變量,聲明遊標,設置變更爲遊標
                 DECLARE @MyVariable CURSOR      --聲明@MyVariable 這個變量

                 DECLARE MyCursor CURSOR FOR  --注意這裏的MyCursor前沒有@符號,聲明瞭一個遊標
                SELECT id,name FROM usertable

                SET @MyVariable = MyCursor          --在這裏才把遊標賦值給變量@MyVariable

2,使用Open語句填充該遊標

        Open @MyVariable        --使用之前必須先打開它
                                               --open語句會執行Declare Cursor語句中指定的Select語句,並填充遊標

3,使用Fetch語句更改遊標所指向的記錄,並將值存儲在局部變量中:

    Fetch Next From @MyVariable
    Into @intID,@chvName
   
    說明: 此語句的語法是 Fetch 操作符 From 遊標變量名 Into 變量名
      
     a)操作符可以是: Next(下一條),Prior(前一條),First(第一條),Last(最後一條),
        也可以指定絕對位置和相對位置
    b)遊標變量名就是之前創建並填充的@MyVariable
    c)變量名:需要在使用之前聲明,本例 用到的@intID,@chvName
        在Declare @MyVariable Cursor之前聲明Declare @intID int,@chvName varchar(50)
    d)遊標剛好打開時 Fetch Next語句讀取第一條記錄

4,對檢索出來的信息進行處理

  While (@@FETCH_STATUS=0)
    Begin
       if @chvName='不必完美'
          begin
              update usetable set name='管理員'  where id=@intID
          end
          Fetch Next From @MyVariable  --移動到下一條,你可以反覆使用這個語句
          Into @intID,@chvName
    End

    說明:@@FETCH_STATUS是一個全局變量,
            它返回在當前連接期間執行的最後一條Fetch語句的執行狀態.
            它經常循環中 用於退出循環的條件.

           @@FETCH_STATUS的值和其含義:
             0(數字零),提取完全成功;
             -1, 最後一條已經讀完或讀取失敗
             -2,記錄丟失(例如,其他人刪除了該記錄)

    還有一個可能會用到的全局變量@@cursor_rows  遊標中的記錄數

5,使用Close語句關閉該遊標,釋放大部分的資源(釋放記錄集以及鎖)

       Close @MyVariable

       說明:此語句執行對象必須是一個已經打開的遊標,否則將報錯.

6,使用Deallocate語句清楚該遊標.

    Deallocate @MyVariable

    說明:Close語句執行之後,遊標結構仍然存在,你還可以再次打開它,如果徹底不用了.你應該用Dealocate語句刪除該結構.

完成後的實例爲:

            Declare @intID int,@chvName varchar(50)

             Declare @MyVariable Cursor                --聲明@MyVariable 這個變量

             Set @MyVariable =Cursor For                --根據select創建遊標的固定用法
             SELECT id,name FROM usertable  

            Open @MyVariable        --使用之前必須先打開它

            Fetch Next From @MyVariable
            Into @intID,@chvName

  While (@@FETCH_STATUS=0)
    Begin
       if @chvName='不必完美'
          begin
              update usetable set name='管理員'  where id=@intID
          end
          Fetch Next From @MyVariable  --移動到下一條,你可以反覆使用這個語句
          Into @intID,@chvName
    End

Close @MyVariable

Deallocate @MyVariable


本文部分內容引自:<SQL Server 2000存儲過程與XML編程>106-111頁

三、更詳細的參考資料獲得方法:

    1/  在MSSQL的聯機幫助中搜索:”Transact-SQL 遊標“可以得到詳細的參數解釋信息。

       具體操作方法:在企業管理器的菜單欄點幫助->幫助主題->索引->輸入"Transact-SQL 遊標"

    2/  微軟的官方幫助:
    MSDN 中文幫助地址爲:http://msdn2.microsoft.com/zh-cn/library/ms190028.aspx

    3/ 相關圖書的購買地址:
       http://www.dearbook.com.cn/book/SearchBook.aspx?keyword=%u5B58%u50A8%u8FC7%u7A0B 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章