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

歡迎訪問 生活随笔!

生活随笔

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

数据库

SQL Server 数据库的维护(四)__游标(cursor)

發布時間:2023/12/13 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 数据库的维护(四)__游标(cursor) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

--維護數據庫--


?


?

--游標(cursor)--

--概述

注:使用select語句查詢結果的結果集是一個整體,如果想每次處理一行或一部分行數據,游標可以提供這種處理機制。可以將游標理解為指針指針指向哪條記錄,哪條記錄即是被操作記錄

游標處理結果集的方式:

1)允許定位在結果集的指定位置行

2)從結果集的當前位置檢索一行或一部分行記錄

3)支持對結果集當前位置做數據修改、刪除等操作

?

--使用游標

注:使用游標定位和操作數據記錄的一般步驟為:聲明游標、打開游標、抽取數據、關閉游標和釋放游標

--聲明游標?(declare … cursor)

注:聲明游標跟聲明變量相似,用declare命令

declare 游標名 cursor --declare表示聲明游標名,cursor表示游標含義

[forward_only] [scroll] [read_only] [dynamic] --可選項forward_only表示游標為只進游標。可選項read_only定義游標為只讀游標。可選項scroll表示可以使用所有抽取數據的選項。可選項dynamic表示游標結果集中的數據可以修改。

for select語句 [for update [of 字段名 [ , ...] ] ] --select語句指能夠查詢到結果集的查詢語句,其中不能包含compute、compute by和into語句。要對結果集中做update修改操作時,可以使用of字段名來指明允許被修改的字段名,如果不使用of指定字段名,則所有字段都修改。

?

--打開游標

open 游標名 --open命令表示打開。“游標名”必須是已定義的、且沒有在使用的游標。剛打開游標,指針指向結果集中第一條記錄之前。

全局標量@@error可以判斷游標是否打開成功,如果返回0只則說明成功,否則失敗。

全局變量@@cursor_rows可以返回被打開的游標中記錄個數。

?

--抽取游標

fetch [first | prior | next | last | absolute {n|@變量} | relative {n|@變量} ] --fetch命令表示抽取數據,一次只能抽取一條記錄

[from] 游標名 [into @變量名 [, ...] ] --into@變量名,...把抽取出的字段值賦值給指定變量,然后使用。

--first命令用來抽取結果集中的第一條記錄,并定位指針。

--prior命令用來抽取當前記錄的前一條記錄,并定位指針。如果當前記錄為結果集中的第一條記錄,prior命令則使指針上移至第一條記錄上方,并不會抽取結果。

--next命令用來抽取當前記錄的后一條記錄,并定位指針。新打開的數據庫使用next抽取出結果集中第一行記錄。如果結果集中最后一行記錄為當前記錄,next則使指針指向最后一條記錄下方,并不會抽取出結果。

--last命令用來抽取結果集中的最后一條記錄,并定位指針。

--absolute {n|@變量},當n(或@變量)為正數時,返回結果集中從頭開始的第n(或@變量)條記錄,并定位指針當n(或@變量)為負數時,返回結果集中從末尾開始的第n(或@變量)條記錄,并定位指針。

--relative {n|@變量},當n(或@變量)為正數時,返回結果集中從當前行開始向下的第n(或@變量)條記錄,并定位指針;當n(或@變量)為負數時,返回結果集中從末尾開始的第n(或@變量)條記錄,并定位指針。

--可以使用全局變量@@fetch_status的值來判斷fetch命令是否抽取到數據值為0表示抽取到記錄值為-1表示指針指向結果集最后一條記錄下方值為-2表示抽取操作存在問題

?

--關閉游標

close 游標名 --游標關閉后不能使用fetch命令抽取游標中的記錄,除非再次使用open命令(打開)重新打開。

?

--釋放游標

deallocate 游標名 --被釋放后的游標不能再使用open命令打開使用,除非使用declare命令(聲明)重新定義。

例:(***下面是一個幫助理解的案例***)(逐條查看“商品管理數據庫”的“銷售信息表”中2012年12月20日的銷售信息)use 商品管理數據庫goset nocount on--聲明游標declare c_銷售表_日期 cursorforselect 商品信息表.商品編號,商品信息表.商品名稱,銷售金額 from 商品信息表,銷售信息表 where 商品信息表.商品編號=銷售信息表.商品編號and 銷售日期='2012-12-20'--打開游標open c_銷售表_日期--抽取數據beginprint '=====2012年12月20日銷售信息====='declare @pdno nchar(8),@pdname nvarchar(10), @salemoney decimal(17,2)--抽取第一條記錄,并將抽取到的變量賦值給相應變量fetch next from c_銷售表_日期 into @pdno,@pdname,@salemoney--使用全局變量@@fetch_status值是否為0作為循環判斷條件,檢驗是否抽取到記錄,如抽取到就在循環體內輸出抽取到的值,--再繼續使用fetch命令抽取數據,直到@@FETCH_STATUS的值不為0為止while(@@FETCH_STATUS=0)beginprint '商品編號:'+@pdno+' 商品名稱:'+@pdname+' 銷售金額:'+convert(nchar(25),@salemoney)fetch next from c_銷售表_日期 into @pdno,@pdname,@salemoneyendend--關閉游標close c_銷售表_日期--釋放游標deallocate c_銷售表_日期set nocount offgo 理解例子?

?注:"--"可看成說明或者注釋文本

轉載于:https://www.cnblogs.com/xifengyeluo/p/5898518.html

總結

以上是生活随笔為你收集整理的SQL Server 数据库的维护(四)__游标(cursor)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。