日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库SQL ServerSQL Server教程:详细学习游标

發(fā)布時間:2023/12/19 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库SQL ServerSQL Server教程:详细学习游标 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

游標(Cursor)是處理數(shù)據(jù)的一種方法,為了查看或者處理結(jié)果集中的數(shù)據(jù),游標提供了在結(jié)果集中一次以行或者多行前進或向后瀏覽數(shù)據(jù)的能力。我們可以把游標作一個指針,它可以指定結(jié)果中的任何位置,然后允許用戶對指定位置的數(shù)據(jù)進行處理。

  1.游標的組成

  游標包含兩個部分:一個是游標結(jié)果集、一個是游標置。

  游標結(jié)果集:定義該游標得SELECT語句返回的行的集合。游標位置:指向這個結(jié)果集某一行的當前指針。

  2.游標的分類

  游標共有3類:

  API服務(wù)器游標

  Transaction-SQL游標

  API客戶端游標

  其中前兩種游標都是運行在服務(wù)器上的,所以又叫做服務(wù)器游標

  API服務(wù)器游標

  API服務(wù)器游標主要應(yīng)用在服務(wù)上,當客戶端的應(yīng)用程序調(diào)用API游標函數(shù)時,服務(wù)器會對API函數(shù)進行處理。使用API函數(shù)和方法可以實現(xiàn)如下功能:

  打開一個連接。

  設(shè)置定義游標特征的特性或?qū)傩?#xff0c;API自動將游標影射到每個結(jié)果集。

  執(zhí)行一個或多個Transaction-SQL語句。

  使用API函數(shù)或方法提取結(jié)果集中的行。

  API服務(wù)器游標包含以下四種:靜態(tài)游標、動態(tài)游標、只進游標、鍵集驅(qū)動游標(Primary key)

  靜態(tài)游標的完整結(jié)果集將打開游標時建立的結(jié)果集存儲在臨時表中,(靜態(tài)游標始終是只讀的)。靜態(tài)游標具有以下特點:總是按照打開游標時的原樣顯示結(jié)果集;不反映數(shù)據(jù)庫中作的任何修改,也不反映對結(jié)果集行的列值所作的更改;不顯示打開游標后在數(shù)據(jù)庫中新插入的行;組成結(jié)果集的行被其他用戶更新,新的數(shù)據(jù)值不會顯示在靜態(tài)游標中;但是靜態(tài)游標會顯示打開游標以后從數(shù)據(jù)庫中刪除的行。

  動態(tài)游標與靜態(tài)游標相反,當滾動游標時動態(tài)游標反映結(jié)果集中的所有更改。結(jié)果集中的行數(shù)據(jù)值、順序和成員每次提取時都會改變。

  只進游標不支持滾動,它只支持游標從頭到尾順序提取數(shù)據(jù)行。注意:只進游標也反映對結(jié)果集所做的所有更改。

  鍵集驅(qū)動游標同時具有靜態(tài)游標和動態(tài)游標的特點。當打開游標時,該游標中的成員以及行的順序是固定的,鍵集在游標打開時也會存儲到臨時工作表中,對非鍵集列的數(shù)據(jù)值的更改在用戶游標滾動的時候可以看見,在游標打開以后對數(shù)據(jù)庫中插入的行是不可見的,除非關(guān)閉重新打開游標

  Transaction-SQL游標

  該游標是基于Declare Cursor 語法,主要用于Transaction-SQL腳本、存儲過程以及觸發(fā)器中。Transaction-SQL游標在服務(wù)器處理由客戶端發(fā)送到服務(wù)器的Transaction-SQL語句。

  在存儲過程或觸發(fā)器中使用Transaction-SQL游標的過程為:

  聲明Transaction-SQL變量包含游標返回的數(shù)據(jù)。為每個結(jié)果集列聲明一個變量。聲明足夠大的變量來保存列返回的值,并聲明變量的類型為可從數(shù)據(jù)類型隱式轉(zhuǎn)換得到的數(shù)據(jù)類型。

  使用Declare Cursor語句將Transaction-SQL游標與Select語句相關(guān)聯(lián)。還可以利用Declare Cursor定義游標的只讀、只進等特性。

  使用Open語句執(zhí)行Select語句填充游標

  使用Fetch Into語句提取單個行,并將每列中得數(shù)據(jù)移至指定的變量中。注意:其他Transaction-SQL語句可以引用那些變量來訪問提取的數(shù)據(jù)值。Transaction-SQL游標不支持提取行塊。

  使用Close語句結(jié)束游標的使用。注意:關(guān)閉游標以后,該游標是存在,可以使用Open命令打開繼續(xù)使用,只有調(diào)用Deallocate語句才會完全釋放。

  客戶端游標

  該游標將使用默認結(jié)果集把整個結(jié)果集高速緩存在客戶端上,所有的游標操作都在客戶端的高速緩存中進行。注意:客戶端游標只支持只進和靜態(tài)游標。不支持其他游標

  3.游標的生命周期

  游標的生命周期包含有五個階段:聲明游標、打開游標、讀取游標數(shù)據(jù)、關(guān)閉游標、釋放游標

  聲明游標是為游標指定獲取數(shù)據(jù)時所使用的Select語句,聲明游標并不會檢索任何數(shù)據(jù),它只是為游標指明了相應(yīng)的Select 語句。

  Declare 游標名稱 Cursor 參數(shù)

  聲明游標的參數(shù)

  Local與Global:Local表示游標的作用于僅僅限于其所在的存儲過程、觸發(fā)器以及批處理中、執(zhí)行完畢以后游標自動釋放。Global表示的是該游標作用域是整個會話層。由連接執(zhí)行的任何存儲過程、批處理等都可以引用該游標名稱,僅在斷開連接時隱性釋放。

  Forward_only與Scroll:前者表示為只進游標,后者表示為可以隨意定位。默認為前者。

  Static、Keyset與Dynamic: 第一個表示定義一個游標,其數(shù)據(jù)存放到一個臨時表內(nèi),對游標的所有請求都從臨時表中應(yīng)答,因此,對該游標進行提取操作時返回的數(shù)據(jù)不反映對基表所作的修改,并且該游標不允許修改。Keyset表示的是,當游標打開時,鍵集驅(qū)動游標中行的身份與順序是固定的,并把其放到臨時表中。Dynamic表示的是滾動游標時,動態(tài)游標反映對結(jié)果集內(nèi)所有數(shù)據(jù)的更改。

  Read_only 、Scroll_Locks與Optimistic:第一個表示的是只讀游標,第二個表示的是在使用的游標結(jié)果集數(shù)據(jù)上放置鎖,當行讀取到游標然后對它們進行修改時,數(shù)據(jù)庫將鎖定這些行,以保證數(shù)據(jù)的一致性。Optimistic的含義是游標將數(shù)據(jù)讀取以后,如果這些數(shù)據(jù)被更新了,則通過游標定位進行的更新與刪除操作將不會成功。

  標準游標


  Declare?MyCursor?Cursor
  For?Select?*?From?Master_Goods

  只讀游標


  Declare?MyCusror?Cursor
  For?Select?*?From?Master_Goods
  For?Read?Only

  可更新游標


  Declare?MyCusror?Cursor
  For?Select?*?From?Master_Goods
  For?UpDate

  打開游標使用Open語句用于打開Transaction-SQL服務(wù)器游標,執(zhí)行Open語句的過程中就是按照Select語句進行填充數(shù)據(jù),打開游標以后游標位置在第一行。

  打開游標

  全局游標:Open Global MyCursor

  局部游標: Open MyCursor

  讀取游標數(shù)據(jù):在打開游標以后,使用Fetch語句從Transaction-SQL服務(wù)器游標中檢索特定的一行。使用Fetch操作,可以使游標移動到下一個記錄,并將游標返回的每個列得數(shù)據(jù)分別賦值給聲明的本地變量。


  Fetch?[Next?|?Prior?|?First?|?Last?|?Absolute n |?Relative n ]?From?MyCursor
  Into?@GoodsID,@GoodsName

  其中:Next表示返回結(jié)果集中當前行的下一行記錄,如果第一次讀取則返回第一行。默認的讀取選項為Next

  Prior表示返回結(jié)果集中當前行的前一行記錄,如果第一次讀取則沒有行返回,并且把游標置于第一行之前。

  First表示返回結(jié)果集中的第一行,并且將其作為當前行。

  Last表示返回結(jié)果集中的最后一行,并且將其作為當前行。

  Absolute n 如果n為正數(shù),則返回從游標頭開始的第n行,并且返回行變成新的當前行。如果n為負,則返回從游標末尾開始的第n行,并且返回行為新的當前行,如果n為0,則返回當前行。

  Relative n 如果n為正數(shù),則返回從當前行開始的第n行,如果n為負,則返回從當前行之前的第n行,如果為0,則返回當前行。

  關(guān)閉游標調(diào)用的是Close語句,方式如下:

 


 Close?Global?MyCursor?Close?MyCursor

  釋放游標調(diào)用的是Deallocate語句,方法如下:


  Deallocate?Glboal?MyCursor?Deallocate?MyCursor

  游標實例:


  Declare?MyCusror?Cursor?Scroll
  For?Select?*?From?Master_Goods?Order?By?GoodsID
  Open?MyCursor
  Fetch?next?From?MyCursor
  Into?@GoodsCode,@GoodsName
  While(@@Fetch_Status?=?0)
  Begin
  Begin
  Select?@GoodsCode?=?Convert(Char(20),@GoodsCode)
  Select?@GoodsName?=?Convert(Char(20),@GoodsName)
  PRINT?@GoodsCode?+?':'?+?@GoodsName
  End
  Fetch?next?From?MyCursor
  Into?@GoodsCode,@GoodsName
  End
  Close?MyCursor
  Deallocate?MyCursor

  修改當前游標的數(shù)據(jù)方法如下:


  UpDate?Master_Goods?Set?GoodsName?=?'yangyang8848'?Where?Current?Of?MyCursor;

  刪除當前游標行數(shù)據(jù)的方法如下:


  Delete?From?Master_Goods?Where?Current?Of?MyCursor

  Select @@CURSOR_ROWS 可以得到當前游標中存在的數(shù)據(jù)行數(shù)。注意:此變量為一個連接上的全局變量,因此只對應(yīng)最后一次打開的游標

總結(jié)

以上是生活随笔為你收集整理的数据库SQL ServerSQL Server教程:详细学习游标的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美成人精品欧美一级私黄 | 天堂va欧美ⅴa亚洲va一国产 | 国产精品麻豆果冻传媒在线播放 | 国产热热| jizz欧美性23| 青青久在线视频 | 亚洲靠逼 | 久久伊人影院 | 今天高清视频在线观看视频 | 国产精品久久久久久av | 一级片播放 | av在线资源网站 | 欧美大片xxx | 久久精品无码Av中文字幕 | 欧美性受xxxx狂喷水 | 欧美日韩中出 | 韩国三级免费 | 国产精品嫩 | 日韩精品在线不卡 | 亚洲精品视频免费 | 福利二区视频 | 欧美亚洲图片小说 | 91传媒入口| 特级新鲜大片片 | 亚洲大片免费看 | 日本美女毛片 | 乱色精品无码一区二区国产盗 | 男女互操在线观看 | 欧美亚洲色图视频 | 国产中文久久 | 色图视频 | 欧美一区在线视频 | 日本免费一二三区 | 好吊色视频一区二区三区 | 久久成人高清 | 老司机成人网 | 日本久久久久久久久 | 在线免费观看国产精品 | 在线观看免费毛片 | 亚洲精品女人 | 亚洲欧美精品一区二区 | 亚洲福利在线播放 | 欧美日韩一区不卡 | 一区二区三区偷拍 | 黄色一级在线观看 | 中文字幕第2页 | 国产又粗又猛又爽69xx | 成人影视在线播放 | 欧美精品成人一区二区三区四区 | 侵犯女教师一区二区三区 | 一级黄色录像免费观看 | 亚洲国产一区二区a毛片 | 丝袜福利视频 | 亚洲色图激情 | 国产黄色精品 | 中文一区二区 | 国产毛片毛片毛片毛片毛片 | 精品久久91 | 男人晚上看的视频 | 极品女神无套呻吟啪啪 | 国产一级做a爰片久久毛片男 | 九九热国产 | 综合五月天| 97伦伦午夜电影理伦片 | 亚欧美视频 | 91精品国产精品 | 黄色一级视频免费 | 粗喘呻吟撞击猛烈疯狂 | 尼姑福利影院 | 日本五十熟hd丰满 | 夜夜撸影院 | 99热偷拍| 久久天堂视频 | 国产女女调教女同 | 国产又粗又猛又黄又爽 | 穿情趣内衣被c到高潮视频 欧美性猛交xxxx黑人猛交 | 日本一二三不卡视频 | 午夜性视频| 国产专区精品 | 亚洲永久免费网站 | 亚洲在线资源 | 777亚洲| 成人午夜精品福利 | 国产精品久久久久精 | 任你操精品视频 | 国产天堂视频 | 亚洲国产欧美日韩在线 | 免费黄色看片网站 | 国产精品欧美激情在线 | 久久精品国产99国产精品 | www.av在线视频 | 国产精欧美一区二区三区蓝颜男同 | 致命弯道8在线观看免费高清完整 | 国产经典一区二区 | 国产午夜无码精品免费看奶水 | 成人激情综合 | 五月婷婷俺也去 | 国产超91 | 欧美一区永久视频免费观看 |