《全面戰爭:戰錘3》震旦天朝 vs 奸奇 “長垣之戰”演示
阿新 • • 發佈:2021-10-20
什麼是遊標:
遊標類似於一個指標,遊標就是把資料結果放到記憶體中,然後遊標指向這個記憶體地址,就像資料結構裡的出棧和入棧的操作裡的指向一樣。
作用:
定位到結果集中某一行。
以讓我們一行一行的去處理資料, 類似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