真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SqlServer系列筆記——游標(biāo)

游標(biāo)的概念

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站制作、黃平網(wǎng)絡(luò)推廣、成都小程序開發(fā)、黃平網(wǎng)絡(luò)營(yíng)銷、黃平企業(yè)策劃、黃平品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供黃平建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com

游標(biāo)是一種數(shù)據(jù)訪問(wèn)機(jī)制,是一個(gè)在給定結(jié)果集中以行為單位訪問(wèn)和操縱數(shù)據(jù)的數(shù)據(jù)庫(kù)對(duì)象

游標(biāo)的好處:可以逐行的處理數(shù)據(jù)允許定位于結(jié)果集中的特定的行從當(dāng)前結(jié)果集中獲取一行

能對(duì)結(jié)果集的當(dāng)前行進(jìn)行修改

 T-SQL中的游標(biāo)定義在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 ] ] ]
[;]
--默認(rèn)作用域?yàn)镚LOBAL
--默認(rèn) Forward_Only,意味著游標(biāo)只能從數(shù)據(jù)集開始向數(shù)據(jù)集結(jié)束的方向讀取,F(xiàn)ETCH NEXT是唯一的選項(xiàng),而SCROLL支持游標(biāo)在定義的數(shù)據(jù)集中向任何方向,或任何位置移動(dòng)
--STATIC  KEYSET  DYNAMIC  和 FAST_FORWARD 四選一
    這四個(gè)關(guān)鍵字是游標(biāo)所在數(shù)據(jù)集所反應(yīng)的表內(nèi)數(shù)據(jù)和游標(biāo)讀取出的數(shù)據(jù)的關(guān)系
    STATIC意味著,當(dāng)游標(biāo)被建立時(shí),將會(huì)創(chuàng)建FOR后面的SELECT語(yǔ)句所包含數(shù)據(jù)集的副本存入tempdb數(shù)據(jù)庫(kù)中,任何對(duì)于底層表內(nèi)數(shù)據(jù)的更改不會(huì)影響到游標(biāo)的內(nèi)容.
    DYNAMIC是和STATIC完全相反的選項(xiàng),當(dāng)?shù)讓訑?shù)據(jù)庫(kù)更改時(shí),游標(biāo)的內(nèi)容也隨之得到反映,在下一次fetch中,數(shù)據(jù)內(nèi)容會(huì)隨之改變
    KEYSET可以理解為介于STATIC和DYNAMIC的折中方案。將游標(biāo)所在結(jié)果集的唯一能確定每一行的主鍵存入tempdb,當(dāng)結(jié)果集中任何行改變或者刪除時(shí),@@FETCH_STATUS會(huì)為-2,KEYSET無(wú)法探測(cè)新加入的數(shù)據(jù)
    FAST_FORWARD可以理解成FORWARD_ONLY的優(yōu)化版本.FORWARD_ONLY執(zhí)行的是靜態(tài)計(jì)劃,而FAST_FORWARD是根據(jù)情況進(jìn)行選擇采用動(dòng)態(tài)計(jì)劃還是靜態(tài)計(jì)劃,大多數(shù)情況下FAST_FORWARD要比FORWARD_ONLY性能略好.
--READ_ONLY  SCROLL_LOCKS  OPTIMISTIC 三選一 
    READ_ONLY意味著聲明的游標(biāo)只能讀取數(shù)據(jù),游標(biāo)不能做任何更新操作
    SCROLL_LOCKS是另一種極端,將讀入游標(biāo)的所有數(shù)據(jù)進(jìn)行鎖定,防止其他程序進(jìn)行更改,以確保更新的絕對(duì)成功
    OPTIMISTIC是相對(duì)比較好的一個(gè)選擇,OPTIMISTIC不鎖定任何數(shù)據(jù),當(dāng)需要在游標(biāo)中更新數(shù)據(jù)時(shí),如果底層表數(shù)據(jù)更新,則游標(biāo)內(nèi)數(shù)據(jù)更新不成功,如果,底層表數(shù)據(jù)未更新,則游標(biāo)內(nèi)表數(shù)據(jù)可以更新

游標(biāo)的類型

靜態(tài)游標(biāo):adopenstatic不檢測(cè)數(shù)據(jù)行的變化

動(dòng)態(tài)游標(biāo):adopendynamic反映所有數(shù)據(jù)行的改變

僅向前游標(biāo):adopenforwardonly 不支持滾動(dòng)

鍵集游標(biāo):adopenstatic能反映修改,但不能準(zhǔn)群反映插入、刪除

游標(biāo)的使用順序

定義游標(biāo)declare

打開游標(biāo)open

使用游標(biāo)fetch

關(guān)閉游標(biāo)close

釋放游標(biāo)deallocate

declare curTest cursor

 scroll for select Title from dbo.Course

open curTest  --打開游標(biāo)

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 --關(guān)閉游標(biāo)

deallocate curTest --釋放游標(biāo)

對(duì)于游標(biāo)一些優(yōu)化建議

  •      如果能不用游標(biāo),盡量不要使用游標(biāo)

  •      用完用完之后一定要關(guān)閉和釋放

  •      盡量不要在大量數(shù)據(jù)上定義游標(biāo)

  •      盡量不要使用游標(biāo)上更新數(shù)據(jù)

  •      盡量不要使用insensitive, static和keyset這些參數(shù)定義游標(biāo)

  •      如果可以,盡量使用FAST_FORWARD關(guān)鍵字定義游標(biāo)

  •      如果只對(duì)數(shù)據(jù)進(jìn)行讀取,當(dāng)讀取時(shí)只用到FETCH NEXT選項(xiàng),則最好使用FORWARD_ONLY參數(shù)


網(wǎng)站標(biāo)題:SqlServer系列筆記——游標(biāo)
標(biāo)題來(lái)源:http://weahome.cn/article/gpcies.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部