游標
游標可以對乙個select的結果集進行處理,或是不需要全部處理,就會返回乙個對記錄集進行處理之後的結果。
1、游標實際上是一種能從多條資料記錄的結果集中每次提取一條記錄的機制。游標可以完成:
# 允許定位到結果集中的特定行
# 從結果集的當前位置檢索一行或多行資料
# 支援對結果集中當前位置的進行修改
由於游標是將記錄集進行一條條的操作,所以這樣給伺服器增加負擔,一般在操作複雜的結果集的情況下,才使用游標。sql server 2005有三種游標:t-sql游標、api游標、客戶端游標。
2、游標的基本操作
游標的基本操作有定義游標、開啟游標、迴圈讀取游標、關閉游標、刪除游標。
a、 定義游標
declare cursor_name --游標名稱
cursor [local | global] --全域性、區域性
[forward only | scroll] --游標滾動方式
[read_only | scroll_locks | optimistic] --讀取方式
for select_statements --查詢語句
[for update | of column_name …] --修改字段
引數:
forward only | scroll:前乙個引數,游標只能向後移動;後乙個引數,游標可以隨意移動
read_only:唯讀游標
scroll_locks:游標鎖定,游標在讀取時,資料庫會將該記錄鎖定,以便游標完成對記錄的操作
optimistic:該引數不會鎖定游標;此時,如果記錄被讀入游標後,對游標進行更新或刪除不會超過
b、 開啟游標
open cursor_name;
游標開啟後,可以使用全域性變數@@cursor_rows顯示讀取記錄條數
c、 檢索游標
fetch cursor_name;
檢索方式如下:
fetch first; 讀取第一行
fetch next; 讀取下一行
fetch prior; 讀取上一行
fetch last; 讀取最後一行
fetch absolute n; 讀取某一行
如果n為正整數,則讀取第n條記錄
如果n為負數,則倒數提取第n條記錄
如果n為,則不讀取任何記錄
fetch pelative n
如果n為正整數,則讀取上次讀取記錄之後第n條記錄
如果n為負數,則讀取上次讀取記錄之前第n條記錄
如果n為,則讀取上次讀取的記錄
d、 關閉游標
close cursor_name;
e、 刪除游標
deallocate cursor_name;
3、游標操作示例
–建立乙個游標
declare cursor_stu cursor scroll for
select id, name, age from student;
–開啟游標
open cursor_stu;
–儲存讀取的值
declare @id int,
@name nvarchar(20),
@age varchar(20);
–讀取第一條記錄
fetch first from cursor_stu into @id, @name, @age;
–迴圈讀取游標記錄
print 『讀取的資料如下:』;
–全域性變數
while (@@fetch_status = 0)
begin
print 『編號:』 + convert(char(5), @id) + 『, 名稱:』 + @name + 『, 型別:』 + @age;
–繼續讀取下一條記錄
fetch next from cursor_stu into @id, @name, @age;
end–關閉游標
close area_cursor;
–刪除游標
–deallocate area_cursor;
SQL Server游標的使用
declare cursor name cursor local global forward only scroll static keyset dynamic fast forward read only scroll locks optimistic type warning for sele...
SQL Server游標的使用
由於sql server中沒有提供直接遍歷表的每一行的方法,所以只有通過游標和while迴圈來代替。當讓也可以不適用游標,僅僅使用while迴圈也能遍歷表 當id為int,主鍵時可用這種方式 但兩種方式我沒有做過實際的對比測試,效率誰高誰低我也不好說。我只給乙個游標使用的簡單示例,想深入了解和使用游...
SQL SERVER 游標的使用
定義游標,讓游標指向sql查詢的結果 declare democursor cursor for select name,id from userinfo 開啟游標。open democursor declare name nvarchar 32 declare id int 把游標指向的資料取出來...