一般情況下,我們用SELECT這些查詢語句時,都是針對的一行記錄而言,
如果要在查詢分析器中對多行記錄(即記錄集)進行讀取操作時,則需要使用到遊標或WHILE等循環
遊標的類型:
1、靜態遊標(不偵測資料行的變化)
2、動態遊標(反映所有資料行的變更)
3、僅向前遊標(不支援捲動)
4.鍵集遊標(能反映修改,但無法精確反映插入、刪除)
遊標使用順序:
1、定義遊標
2、開啟遊標
3、使用遊標
2、開啟遊標
3、使用遊標
Transact-SQL:
declare 遊標名 cursor [LOCAL | GLOBAL][FORWARD_ONLY | SCROLL][STATIC | KEYSET | DYNAMIC ] [READ_ONLY | SCROLL_LOCKS] .附註:LOCAL 局部遊標 GLOBAL 全域遊標
FORWARD_ONLY 僅向前 SCROLL 捲動
取得遊標的資料
FETCH [[NEXT | PRIOR | FIRST | LAST |
From ] 遊標名[into 變數]
附註:
NEXT 下一行 PRIOR 行
RELATIVE n 目前位置開始的第n行
into 變數 將目前行程的各場值賦值給變數
遊標狀態變數:
@@fetch_status @@cursor_rows 遊標中結果集中的行數
n 行數-1 遊標是動態的 0 空集遊標
current of 遊標名
標例1:使用遊標例對曆
declare @auid char(12),@aulname varchar(20),@aufname varchar(20), @st char(2),@auinfo varchar(50)
for來au_fname, state
print '所在州: '+@st
-----------' fetch next from auth_cur into @auid,@aulname,@aufname, @st endclose @st
end
close @st endclose @st
¡刪除資料
declare auth_cur cursor scroll for
select au_id, au_lname, au_fname, state
from authors for update of aunamedate of c
set @rowcount = 6
fetch absolute @rowcount from auth_cur --將變數@rowcount標識的行設定為目前行
--下面1行是利用遊標進行修改操作
update authors set au_lname='張' where current of auth_cur --修改遊標中的目前行
--下面1行是利用遊標進行刪除操作
delete from authors where current of auth_cur