SQL Server數據庫練習——遊標

遊標概述

遊標是什麼?

遊標是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 語句之前測試該變量的值才能作出正確的判斷。

最終,執行成功後查詢出的結果如圖所示:所有的書籍都根據價格分成了對應的等級。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章