1. 程式人生 > 遊戲 >《全面戰爭:戰錘3》震旦天朝 vs 奸奇 “長垣之戰”演示

《全面戰爭:戰錘3》震旦天朝 vs 奸奇 “長垣之戰”演示

什麼是遊標:

遊標類似於一個指標,遊標就是把資料結果放到記憶體中,然後遊標指向這個記憶體地址,就像資料結構裡的出棧和入棧的操作裡的指向一樣。

作用:

定位到結果集中某一行。
以讓我們一行一行的去處理資料, 類似c# ado.net SqlDataReader 可以提供一行一行的讀取資料

遊標分類:

1)靜態遊標(Static):在操作遊標的時候,資料發生變化,遊標中資料不變
2)動態遊標(Dynamic):在操作遊標的時候,資料發生變化,遊標中資料改變
3)鍵集驅動遊標(KeySet):在操作遊標的時候,被標識的列發生改變,遊標中資料改變,其他列改變,遊標中資料不變

使用遊標的步驟:

1:建立遊標 declare 遊標名字 cursor for ....接語句
2:開啟遊標 open 遊標名字
3:查詢遊標(可以是遍歷) fetch next from 遊標名稱 into 變數
4:關閉遊標 close 遊標名字
5:刪除(釋放)遊標 deallocate 遊標名字

@@fetch_status:查詢遊標有沒有讀完,如果是-1就說明遊標讀完了,
注意:遊標開啟的初始@@fetch_status也是等於-1,沒有讀取的時候是-1,讀取完了也是-1,等於0表示提取成功

基本使用:

定義一個動態遊標,

--1.建立遊標(Scroll代表滾動遊標,不加Scroll則是隻進的,只能支援fetch next)
declare CURSORMember cursor scroll		--CURSORMember :遊標名字
for select MemberAccount from Member       --查一行的某個欄位給遊標
--2.開啟遊標
open  CURSORMember
--3.提取資料
fetch first from CURSORMember --結果集的第一行
fetch last from CURSORMember  --最後一行
fetch absolute n from CURSORMember --從遊標的第一行開始數,第n行,會讓遊標停留在第n行,用於定位遊標
fetch relative 3 from CURSORMember --從當前位置數,第n行。
fetch next from CURSORMember --當前位置的下一行
fetch prior from CURSORMember --當前位置的上一行

--4.提取資料給變數以供它用(取出第3行使用者名稱,查詢該使用者詳細資訊)
--declare @MemberAccount varchar(30)
--fetch absolute 3 from CURSORMember into @MemberAccount
--select * from Member where MemberAccount = @MemberAccount


--5.利用遊標提取所有的賬戶資訊
--方案一:
fetch absolute 1 from CURSORMember
while @@FETCH_STATUS = 0  --@@FETCH_STATUS=0,提取成功,-1提取失敗,-2行不存在
	begin
		fetch next from CURSORMember	 --當前位置的下一行
	end
--方案二:
declare @MemberAccount varchar(30)
fetch absolute 1 from CURSORMember into @MemberAccount	--將遊標指向第一行
while @@FETCH_STATUS = 0  --@@FETCH_STATUS=0,提取成功,-1提取失敗,-2行不存在
	begin
		print '提取成功:' + @MemberAccount
		fetch next from CURSORMember into @MemberAccount
	end




--6.利用遊標修改和刪除資料
fetch absolute 3 from CURSORMember
update Member set MemberPwd = '1234567' where Current of CURSORMember  --條件直接寫遊標名字就好了,因為遊標當前就指向這行資料

fetch absolute 3 from CURSORMember
delete Member where Current of CURSORMember

select * from Member

--7.關閉遊標
close CURSORMember
--8.刪除遊標
deallocate CURSORMember


--9.建立遊標指向某行多列資料,並迴圈顯示資料
declare CURSORMember cursor scroll
for select MemberAccount,MemberPwd,MemberNickname,MemberPhone from Member

open CURSORMember

declare @MemberAccount varchar(30)
declare	@MemberPwd nvarchar(20)
declare	@MemberNickname nvarchar(20)
declare	@MemberPhone nvarchar(20)
fetch next from CURSORMember into @MemberAccount,@MemberPwd,@MemberNickname,@MemberPhone
while @@FETCH_STATUS = 0  --@@FETCH_STATUS=0,提取成功,-1提取失敗,-2行不存在
	begin
		print '提取成功:' + @MemberAccount+','+@MemberPwd+','+@MemberNickname+','+@MemberPhone
		fetch next from CURSORMember into @MemberAccount,@MemberPwd,@MemberNickname,@MemberPhone
	end
close CURSORMember