(從訪問量上來看 ,本文是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