亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SqlServer系列筆記——游標

發布時間:2020-07-20 12:15:02 來源:網絡 閱讀:308 作者:codejson 欄目:數據庫

游標的概念

游標是一種數據訪問機制,是一個在給定結果集中以行為單位訪問和操縱數據的數據庫對象

游標的好處:可以逐行的處理數據允許定位于結果集中的特定的行從當前結果集中獲取一行

能對結果集的當前行進行修改

 T-SQL中的游標定義在MSDN中如下:

DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]

     [ FORWARD_ONLY | SCROLL ] 
     [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] 
     [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] 
     [ TYPE_WARNING ] 
     FOR select_statement 
     [ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]
--默認作用域為GLOBAL
--默認 Forward_Only,意味著游標只能從數據集開始向數據集結束的方向讀取,FETCH NEXT是唯一的選項,而SCROLL支持游標在定義的數據集中向任何方向,或任何位置移動
--STATIC  KEYSET  DYNAMIC  和 FAST_FORWARD 四選一
    這四個關鍵字是游標所在數據集所反應的表內數據和游標讀取出的數據的關系
    STATIC意味著,當游標被建立時,將會創建FOR后面的SELECT語句所包含數據集的副本存入tempdb數據庫中,任何對于底層表內數據的更改不會影響到游標的內容.
    DYNAMIC是和STATIC完全相反的選項,當底層數據庫更改時,游標的內容也隨之得到反映,在下一次fetch中,數據內容會隨之改變
    KEYSET可以理解為介于STATIC和DYNAMIC的折中方案。將游標所在結果集的唯一能確定每一行的主鍵存入tempdb,當結果集中任何行改變或者刪除時,@@FETCH_STATUS會為-2,KEYSET無法探測新加入的數據
    FAST_FORWARD可以理解成FORWARD_ONLY的優化版本.FORWARD_ONLY執行的是靜態計劃,而FAST_FORWARD是根據情況進行選擇采用動態計劃還是靜態計劃,大多數情況下FAST_FORWARD要比FORWARD_ONLY性能略好.
--READ_ONLY  SCROLL_LOCKS  OPTIMISTIC 三選一 
    READ_ONLY意味著聲明的游標只能讀取數據,游標不能做任何更新操作
    SCROLL_LOCKS是另一種極端,將讀入游標的所有數據進行鎖定,防止其他程序進行更改,以確保更新的絕對成功
    OPTIMISTIC是相對比較好的一個選擇,OPTIMISTIC不鎖定任何數據,當需要在游標中更新數據時,如果底層表數據更新,則游標內數據更新不成功,如果,底層表數據未更新,則游標內表數據可以更新

游標的類型

靜態游標:adopenstatic不檢測數據行的變化

動態游標:adopendynamic反映所有數據行的改變

僅向前游標:adopenforwardonly 不支持滾動

鍵集游標:adopenstatic能反映修改,但不能準群反映插入、刪除

游標的使用順序

定義游標declare

打開游標open

使用游標fetch

關閉游標close

釋放游標deallocate


declare curTest cursor

 scroll for select Title from dbo.Course

open curTest  --打開游標

fetch curTest

declare @Name varchar(50)

fetch first from curTest into @Name

print '課程:'+@Name

while @@FETCH_STATUS=0

begin

fetch next from curTest into @Name

print  '課程:'+@Name 

end


close curTest --關閉游標

deallocate curTest --釋放游標


對于游標一些優化建議

  •      如果能不用游標,盡量不要使用游標

  •      用完用完之后一定要關閉和釋放

  •      盡量不要在大量數據上定義游標

  •      盡量不要使用游標上更新數據

  •      盡量不要使用insensitive, static和keyset這些參數定義游標

  •      如果可以,盡量使用FAST_FORWARD關鍵字定義游標

  •      如果只對數據進行讀取,當讀取時只用到FETCH NEXT選項,則最好使用FORWARD_ONLY參數


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万源市| 清河县| 乌审旗| 南阳市| 松潘县| 宝鸡市| 新乡县| 富锦市| 玉田县| 南木林县| 陵水| 河池市| 宜兰市| 通许县| 镇康县| 衢州市| 安塞县| 吐鲁番市| 康平县| 大足县| 蕉岭县| 巴青县| 涿鹿县| 长治县| 图们市| 海丰县| 偃师市| 宁德市| 南靖县| 丹巴县| 凤凰县| 信丰县| 凉城县| 兴义市| 广州市| 宿松县| 吕梁市| 姚安县| 宜丰县| 平江县| 西城区|