/一般情況下,我們用SELECT這些查詢語句時,都是針對的一行記錄而言,如果要在查詢分析器中對多行記錄(即記錄集)進行讀取操作時,則需要使用到游標或WHILE等迴圈/以下內容摘自http://www.cnblogs.com/aotian56/archive/2007/07/13/817281.htm ...
/一般情況下,我們用SELECT這些查詢語句時,都是針對的一行記錄而言,
如果要在查詢分析器中對多行記錄(即記錄集)進行讀取操作時,則需要使用到游標或WHILE等迴圈
/
以下內容摘自
http://www.cnblogs.com/aotian56/archive/2007/07/13/817281.html
/
游標的類型:
1、靜態游標(不檢測數據行的變化)
2、動態游標(反映所有數據行的改變)
3、僅向前游標(不支持滾動)
4、鍵集游標(能反映修改,但不能準確反映插入、刪除)
游標使用順序:
1、定義游標
2、打開游標
3、使用游標
4、關閉游標
5、釋放游標
Transact-SQL:
declare 游標名 cursor [LOCAL | GLOBAL][FORWARD_ONLY | SCROLL][STATIC | KEYSET | DYNAMIC ] [READ_ONLY | SCROLL_LOCKS]
for selet語句 [for update[of 列名[,列名]]
註:LOCAL 局部游標 GLOBAL 全局游標
FORWARD_ONLY 僅向前 SCROLL 滾動
STATIC 靜態 KEYSET 鍵集 DYNAMIC 動態
READ_ONLY 只讀 SCROLL_LOCKS 鎖定游標當前行
獲取游標的數據
FETCH [[NEXT | PRIOR | FIRST | LAST |
ABSOLUTE{ n | @nvar | RELATIVE { n | @nvar}]
From ] 游標名 [into 變數]
註:
NEXT 下一行 PRIOR 上一行 FIRST 第一行
LAST 最後一行 ABSOLUTE n 第n行
RELATIVE n 當前位置開始的第n行
into 變數 把當前行的各欄位值賦值給變數
游標狀態變數:
@@fetch_status 游標狀態
0 成功 -1 失敗 -2 丟失
@@cursor_rows 游標中結果集中的行數
n 行數 -1 游標是動態的 0 空集游標
操作游標的當前行:
current of 游標名
以下例子,在SQL SERVER 2000 測試成功
use pubs
go
declare @auid char(12),@aulname varchar(20),@aufname varchar(20), @st char(2),@auinfo varchar(50)
declare auth_cur cursor for
select au_id, au_lname, au_fname, state
from authors
open auth_cur
fetch next from auth_cur into @auid,@aulname,@aufname, @st
while (@@fetch_status=0)
begin
print '作者編號: '+@auid
print '作者姓名: '+@aulname+','+@aufname
print '所在州: '+@st
print '--------------------------'
fetch next from auth_cur into @auid,@aulname,@aufname, @st
end
close auth_cur
deallocate auth_cur