1. 程式人生 > 其它 >Sql Server儲存過程中游標的使用

Sql Server儲存過程中游標的使用

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 
1 table1結構如下
id    int
name  varchar(50)

declare @id int
declare @name varchar(50)
declare cursor1 cursor for         --定義遊標cursor1
select * from table1               --使用遊標的物件(跟據需要填入select文)
open cursor1                       --
開啟遊標 fetch next from cursor1 into @id,@name --將遊標向下移1行,獲取的資料放入之前定義的變數@id,@name中 while @@fetch_status=0 --判斷是否成功獲取資料 begin update table1 set name=name+'1' where id=@id --進行相應處理(跟據需要填入SQL文) fetch next from cursor1 into @id,@name --將遊標向下移1行 end close cursor1 --
關閉遊標 deallocate cursor1 --釋放遊標

遊標一般格式:
DECLARE 遊標名稱 CURSOR FOR SELECT 欄位1,欄位2,欄位3,… FROM 表名 WHERE …
OPEN 遊標名稱
FETCH NEXT FROM 遊標名稱 INTO 變數名1,變數名2,變數名3,…
WHILE @@FETCH_STATUS=0
BEGIN
SQL語句執行過程… …
FETCH NEXT FROM 遊標名稱 INTO 變數名1,變數名2,變數名3,…
END
CLOSE 遊標名稱
DEALLOCATE 遊標名稱 (刪除遊標)

注意: 用兩次 “FETCH NEXT FROM ” 是因為,第一次只是用來判斷 @@FETCH_STATUS的,後面一次 “FETCH NEXT FROM ” 才是 loop用到的!也就是後面一次 是在 BEGIN END之間,是被反覆執行的。。每次讀取一行!