亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQL Server游標

2024-08-31 00:55:47
字體:
來源:轉載
供稿:網友
SQL Server游標什么是游標

結果集,結果集就是select查詢之后返回的所有行數據的集合。

游標則是處理結果集的一種機制吧,它可以定位到結果集中的某一行,多數據進行讀寫,也可以移動游標定位到你所需要的行中進行操作數據。

一般復雜的存儲過程,都會有游標的出現,他的用處主要有:

  1. 定位到結果集中的某一行。
  2. 對當前位置的數據進行讀寫。
  3. 可以對結果集中的數據單獨操作,而不是整行執行相同的操作。
  4. 是面向集合的數據庫管理系統和面向行的程序設計之間的橋梁。
游標的分類

根據游標檢測結果集變化的能力和消耗資源的情況不同,SQL Server支持的API服務器游標分為一下4種:

  • 靜態游標:靜態游標的結果集,在游標打開的時候建立在TempDB中,不論你在操作游標的時候,如何操作數據庫,游標中的數據集都不會變。例如你在游標打開的時候,對游標查詢的數據表數據進行增刪改,操作之后,靜態游標中select的數據依舊顯示的為沒有操作之前的數據。如果想與操作之后的數據一致,則重新關閉打開游標即可。
  • 動態游標:這個則與靜態游標相對,滾動游標時,動態游標反應結果集中的所有更改。結果集中的行數據值、順序和成員在每次提取時都會變化。所有用戶做的增刪改語句通過游標均可見。如果使用API函數或T-SQL Where Current of子句通過游標進行更新,他們將立即可見。在游標外部所做的更新直到提交時才可見。
  • 只進游標:只進游標不支持滾動,只支持從頭到尾順序提取數據,數據庫執行增刪改,在提取時是可見的,但由于該游標只能進不能向后滾動,所以在行提取后對行做增刪改是不可見的。
  • 鍵集驅動游標:打開鍵集驅動游標時,該有表中的各個成員身份和順序是固定的。打開游標時,結果集這些行數據被一組唯一標識符標識,被標識的列做刪改時,用戶滾動游標是可見的,如果沒被標識的列增該,則不可見,比如insert一條數據,是不可見的,若可見,須關閉重新打開游標。

靜態游標在滾動時檢測不到表數據變化,但消耗的資源相對很少。動態游標在滾動時能檢測到所有表數據變化,但消耗的資源卻較多。鍵集驅動游標則處于他們中間,所以根據需求建立適合自己的游標,避免資源浪費。。

游標的生命周期

游標的生命周期包含有五個階段:聲明游標、打開游標、讀取游標數據、關閉游標、釋放游標。

1.聲明游標,語法

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 ] ] ]

參數說明:

  • cursor_name:游標名稱。
  • Local:作用域為局部,只在定義它的批處理,存儲過程或觸發器中有效。
  • Global:作用域為全局,由連接執行的任何存儲過程或批處理中,都可以引用該游標。
  • [Local | Global]:默認為local。
  • Forward_Only:指定游標智能從第一行滾到最后一行。Fetch Next是唯一支持的提取選項。如果在指定Forward_Only是不指定Static、KeySet、Dynamic關鍵字,默認為Dynamic游標。如果Forward_Only和Scroll沒有指定,Static、KeySet、Dynamic游標默認為Scroll,Fast_Forward默認為Forward_Only
  • Static:靜態游標
  • KeySet:鍵集游標
  • Dynamic:動態游標,不支持Absolute提取選項
  • Fast_Forward:指定啟用了性能優化的Forward_Only、Read_Only游標。如果指定啦Scroll或For_Update,就不能指定他啦。
  • Read_Only:不能通過游標對數據進行刪改。
  • Scroll_Locks:將行讀入游標是,鎖定這些行,確保刪除或更新一定會成功。如果指定啦Fast_Forward或Static,就不能指定他啦。
  • Optimistic:指定如果行自讀入游標以來已得到更新,則通過游標進行的定位更新或定位刪除不成功。當將行讀入游標時,sqlserver不鎖定行,它改用timestamp列值的比較結果來確定行讀入游標后是否發生了修改,如果表不行timestamp列,它改用校驗和值進行確定。如果已修改改行,則嘗試進行的定位更新或刪除將失敗。如果指定啦Fast_Forward,則不能指定他。
  • Type_Warning:指定將游標從所請求的類型隱式轉換為另一種類型時向客戶端發送警告信息。
  • For Update[of column_name ,....] :定義游標中可更新的列。

2.聲明一個動態游標

declare orderNum_02_cursor cursor scrollfor select OrderId from bigorder where orderNum='ZEORD003402'

3.打開游標

--打開游標語法open [ Global ] cursor_name | cursor_variable_name

cursor_name:游標名,cursor_variable_name:游標變量名稱,該變量引用了一個游標。

--打開游標open orderNum_02_cursor

4.提取數據

--提取游標語法Fetch[ [Next|PRior|Frist|Last|Absoute n|Relative n ]from ][Global] cursor_name[into @variable_name[,....]]

參數說明:

  • Frist:結果集的第一行
  • Prior:當前位置的上一行
  • Next:當前位置的下一行
  • Last:最后一行
  • Absoute n:從游標的第一行開始數,第n行。
  • Relative n:從當前位置數,第n行。
  • Into @variable_name[,...] : 將提取到的數據存放到變量variable_name中。

例子:

--提取數據fetch first from orderNum_02_cursorfetch relative 3 from orderNum_02_cursorfetch next from orderNum_02_cursorfetch absolute 4 from orderNum_02_cursorfetch next from orderNum_02_cursorfetch last from orderNum_02_cursor fetch prior from orderNum_02_cursorselect * from bigorder where orderNum='ZEORD003402'

結果(對比一下,就明白啦):

例子:

--提取數據賦值給變量declare @OrderId intfetch absolute 3 from orderNum_02_cursor into @OrderIdselect @OrderId as idselect * from bigorder where orderNum='ZEORD003402'

結果:

通過檢測全局變量@@Fetch_Status的值,獲得提取狀態信息,該狀態用于判斷Fetch語句返回數據的有效性。當執行一條Fetch語句之后,@@Fetch_Status可能出現3種值:0,Fetch語句成功。-1:Fetch語句失敗或行不在結果集中。-2:提取的行不存在。

這個狀態值可以幫你判斷提取數據的成功與否。

declare @OrderId intfetch absolute 3 from orderNum_02_cursor into @OrderIdwhile @@fetch_status=0  --提取成功,進行下一條數據的提取操作 begin   select @OrderId as id   fetch  next from orderNum_02_cursor into @OrderId  --移動游標 end 

5.利用游標更新刪除數據

--游標修改當前數據語法Update 基表名 Set 列名=值[,...] Where Current of 游標名--游標刪除當前數據語法Delete 基表名  Where Current of 游標名
---游標更新刪除當前數據---1.聲明游標declare orderNum_03_cursor cursor scrollfor select OrderId ,userId from bigorder where orderNum='ZEORD003402'--2.打開游標open orderNum_03_cursor--3.聲明游標提取數據所要存放的變量declare @OrderId int ,@userId varchar(15)--4.定位游標到哪一行fetch First from orderNum_03_cursor into @OrderId,@userId  --into的變量數量必須與游標查詢結果集的列數相同while @@fetch_status=0  --提取成功,進行下一條數據的提取操作  begin   if @OrderId=122182     begin     Update bigorder Set UserId='123' Where Current of  orderNum_03_cursor  --修改當前行     end   if @OrderId=154074      begin      Delete bigorder Where Current of  orderNum_03_cursor  --刪除當前行      end   fetch next from orderNum_03_cursor into @OrderId ,@userId  --移動游標 end  

6.關閉游標

游標打開后,服務器會專門為游標分配一定的內存空間存放游標操作的數據結果集,同時使用游標也會對某些數據進行封鎖。所以游標一旦用過,應及時關閉,避免服務器資源浪費。

--關閉游標語法close [ Global ] cursor_name | cursor_variable_name--關閉游標close orderNum_03_cursor

7.刪除游標

刪除游標,釋放資源

--釋放游標語法deallocate  [ Global ] cursor_name | cursor_variable_name--釋放游標deallocate orderNum_03_cursor


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品xxx视频| 国产精品一区二区三区在线播放| 欧美高跟鞋交xxxxhd| 日韩暖暖在线视频| 国产一级揄自揄精品视频| 欧美裸身视频免费观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲摸下面视频| 欧美成在线观看| 国内精品免费午夜毛片| 欧美日韩精品在线播放| 97国产成人精品视频| 亚洲一区999| 欧洲亚洲在线视频| www.亚洲男人天堂| 精品亚洲永久免费精品| 亚洲人成自拍网站| 91欧美精品成人综合在线观看| 欧美日韩国产色视频| 久久久综合免费视频| 成人性生交大片免费看视频直播| 日韩暖暖在线视频| 色噜噜国产精品视频一区二区| 日韩美女福利视频| 国产999精品视频| 久久久久在线观看| 91免费国产视频| 欧美韩国理论所午夜片917电影| 91av在线播放视频| 亚洲女人天堂色在线7777| 欧美在线视频免费| 欧美视频在线免费| 国产精品偷伦视频免费观看国产| 激情久久av一区av二区av三区| 国产一区二区激情| 亚洲成人av在线播放| 亚洲黄色在线观看| 久久精品小视频| 亚洲欧美一区二区三区四区| 精品无人区太爽高潮在线播放| 国产成人a亚洲精品| 综合网中文字幕| 最近2019中文字幕大全第二页| 热久久美女精品天天吊色| 久久艹在线视频| 91久久在线播放| 中文日韩电影网站| 亚洲自拍偷拍一区| 亚洲精品美女在线| 成人性生交大片免费看视频直播| 国产视频自拍一区| 成人免费淫片aa视频免费| 欧美激情视频网站| 亚洲石原莉奈一区二区在线观看| 欧美激情按摩在线| 欧美一级黑人aaaaaaa做受| 日韩免费av一区二区| 亚洲成色777777在线观看影院| 91久久久久久久久久久久久| 成人xvideos免费视频| 亚洲精品网站在线播放gif| 欧美日韩中文字幕在线视频| 2019中文字幕在线观看| 国产成人精品一区二区三区| 亚洲自拍在线观看| 久久精品成人欧美大片古装| 97人人做人人爱| 日韩精品免费一线在线观看| www.欧美免费| 欧美黑人巨大xxx极品| 91手机视频在线观看| 欧美电影免费观看电视剧大全| 久久6免费高清热精品| 久久国产精品免费视频| 国产女精品视频网站免费| 精品国产乱码久久久久久婷婷| 亚洲欧美日韩爽爽影院| xxxxx成人.com| 亚洲欧美激情四射在线日| 亚洲精品videossex少妇| 成人免费视频xnxx.com| 日韩在线视频观看| 91精品久久久久久| 日韩av手机在线看| 亚洲欧美国产制服动漫| 91高清免费在线观看| 欧美一区在线直播| 一本色道久久综合亚洲精品小说| 国产精品爱久久久久久久| 亚洲一二在线观看| 在线精品播放av| 国产一区私人高清影院| 欧美日韩色婷婷| 国产精品av在线播放| 北条麻妃99精品青青久久| 亚洲国产精品99久久| 国产日产亚洲精品| 亚洲福利在线观看| 久久成人在线视频| 最新国产精品亚洲| 亚洲jizzjizz日本少妇| 最近中文字幕日韩精品| 国产成人精品综合久久久| 一区二区三区美女xx视频| 色悠悠久久88| 亚洲欧洲午夜一线一品| 久久91精品国产| 精品国内产的精品视频在线观看| 欧美乱人伦中文字幕在线| 亚洲国产精品悠悠久久琪琪| 亚洲片国产一区一级在线观看| 91超碰caoporn97人人| 最近2019年中文视频免费在线观看| 国产成人精品一区二区| 国产精品视频成人| 欧美国产日本高清在线| 色777狠狠综合秋免鲁丝| 国产精品久久久久久久久久久久久久| 亚洲免费影视第一页| 91成人在线播放| 日本老师69xxx| 国产亚洲精品激情久久| 欧美成人黄色小视频| 亚洲综合国产精品| 丝袜亚洲另类欧美重口| 成人福利在线视频| 亚洲最大成人在线| 亚洲精品自在久久| 国产日本欧美一区二区三区| 亚洲精品电影网站| 欧美一区第一页| 国产精品第3页| 国产精品国产三级国产专播精品人| 国产精品亚洲精品| 国产精品综合不卡av| 亚洲欧美在线一区| 亚洲v日韩v综合v精品v| 久久久国产一区| 欧美富婆性猛交| 欧美一级视频免费在线观看| 国产精品99蜜臀久久不卡二区| 欧美成人自拍视频| 欧美孕妇孕交黑巨大网站| 超碰97人人做人人爱少妇| 国产精品成人一区二区三区吃奶| 欧洲永久精品大片ww免费漫画| 国产亚洲人成网站在线观看| 欧美电影在线观看完整版| 欧美xxxx做受欧美.88| 日韩在线免费高清视频| 黑人极品videos精品欧美裸| 色婷婷综合久久久久| 欧美黑人又粗大| 亚洲精品720p| 成人动漫网站在线观看| 精品视频www| 97国产suv精品一区二区62| 九九热精品视频在线播放| 欧美与欧洲交xxxx免费观看| 日本久久精品视频| 韩国精品久久久999| 91伊人影院在线播放| 国产精品欧美日韩久久| 亚洲国产又黄又爽女人高潮的|