遊標概述
遊標是什麼?
遊標是SQL 的一種數據訪問機制。可以將遊標簡單的看成是查詢的結果集的一個指針,可以根據需要在結果集上面來回滾動,瀏覽需要的數據。
遊標如何使用?
一般地,使用遊標都遵循下列的常規步驟:
(1) 聲明遊標。把遊標與T-SQL語句的結果集聯繫起來。
(2) 打開遊標。
(3) 使用遊標操作數據。
(4) 關閉遊標。
(5) 刪除/釋放遊標。
遊標使用示例
下面用一張表格向大家演示遊標的使用。
需求:根據價格設置每本書的等級
價格<50——等級:便宜
價格在50-100之間——等級:中等
價格>100——等級:貴
--定義一個遊標
declare cur_set_lever cursor --聲明一個名爲cur_set_lever的遊標
for select ID,Price from books --for爲了做什麼
--打開遊標
open cur_set_lever
--獲取數據,ID,Price
--定義兩個變量來存數據。注意,定義的變量的類型應該與數據庫中對應字段的類型一致。
declare @id int
declare @price decimal(18,2)
--拿數據/讀取數據
fetch next from cur_set_lever into @id,@price --讀取第一行的數據
--打印數據
--print @id
--循環獲取
while(@@FETCH_STATUS=0) --@@FETCH_STATUS=0,成功執行fetch語句
begin
--修改等級
if(@price<50)
update books set Levels='便宜' where ID=@id
else if(@price<100)
update books set Levels='中等' where ID=@id
else
update books set Levels='貴' where ID=@id
fetch next from cur_set_lever into @id,@price --在循環體內將讀取其餘行數據
end
--關閉遊標
close cur_set_lever
--刪除/釋放遊標
deallocate cur_set_lever
--查詢是否修改成功
select*from books
--附:
--參數說明:
--NEXT 取下一行的數據,並把下一行作爲當前行(遞增)。由於打開遊標後,行指針是指向該遊標第1行之前,所以第一次執行FETCH NEXT操作將取得遊標集中的第1行數據。NEXT爲默認的遊標提取選項。
--每執行一個FETCH操作之後,通常都要查看一下全局變量@@FETCH_STATUS中的狀態值,以此判斷FETCH操作是否成功。該變量有三種狀態值:
--? 0 表示成功執行FETCH語句。
--? -1 表示FETCH語句失敗,例如移動行指針使其超出了結果集。
--? -2 表示被提取的行不存在。
--由於@@FETCH_STATU是全局變量,在一個連接上的所有遊標都可能影響該變量的值。因此,在執行一條FETCH語句後,必須在對另一遊標執行另一FETCH 語句之前測試該變量的值才能作出正確的判斷。
最終,執行成功後查詢出的結果如圖所示:所有的書籍都根據價格分成了對應的等級。