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

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

MSSQL 游標使用 心得

2024-08-31 00:59:48
字體:
來源:轉載
供稿:網友
游標為您提供了在逐行的基礎上而不是一次處理整個結果集為基礎的操作表中數據的方法。
1.如何使用游標
1)定義游標語句 Declare <游標名> Cursor For
2)創建游標語句 Open <游標名>
3)提取游標列值、移動記錄指針 Fetch <列名列表> From <游標名> [Into <變量列表>]
4)使用@@Fetch_Status利用While循環處理游標中的行
5)刪除游標并釋放語句 Close <游標名>/Deallocate <游標名>
6)游標應用實例
--定義游標
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
--創建游標
Open cur_Depart
--移動或提取列值
Fetch From cur_Depart into @DeptID,@DeptName
--利用循環處理游標中的列值
While @@Fetch_Status=0
Begin
Print @DeptID,@DeptName
Fetch From cur_Depart into @DeptID,@DeptName
End
--關閉/釋放游標
Close cur_Depart
Deallocate cur_Depart
2.語句的詳細及注意
1)定義游標語句
Declare <游標名> [Insensitive] [Scroll] Cursor
For <Select 語句> [FOR {Read Only | Update [ OF <列名列表>]}]
Insensitive DBMS創建查詢結果集數據的臨時副本(而不是使用直接引用數據庫表中的真實數據行中的列)。游標是Read Only,也就是說不能修改其內容或底層表的內容;
Scroll 指定游標支持通過使用任意Fetch 選項(First Last Prior Next Relative Absolute)選取它的任意行作為當前行。如果此項省略,則游標將只支持向下移動單行(即只支持游標的Fetch Next);
Select語句 定義游標結果集的標準 SELECT 語句。在游標聲明的 <Select語句>內不允許使用關鍵字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO;
Read Only 防止使用游標的用戶通過更新數據或刪除行改變游標的內容;
Update 創建可更新游標且列出值能被更新的游標列。如果子句中列入了任意列,則只有被列入的列才能被更新。如果Declare Cursor語句中只指定的UPDATE(沒有列名列表),則游標將允許更新它的任何或所有列。
Declare cur_Depart Cursor
For Select * From Department For Update OF cDeptID,cDeptName
2)提取游標列值、移動記錄指針語句
Fetch [Next | Prior | First | Last | {Absolute <行號>} | {Relative <行號>}]
From <游標名> [Into <變量列表……>]
每次執行Fetch語句時,DBMS移到游標中的下一行并把游標中的列值獲取到Into中列出的變量中。因此Fetch語句的Into子句中列出的變量必須與游標定義中Select 語句中的列表的類型與個數相對應;
僅當定義游標時使用Scroll參數時,才能使用Fetch語句的行定位參數(First Last Prior Next Relative Absolute);如果Fetch語句中不包括參數Next | Prior | First | Last,DBMS將執行默認的Fetch Next;
Next 向下、向后移動一行(記錄);
Prior 向上、向前移動一行(記錄);
First 移動至結果集的第一行(記錄);
Last 移動至結果集的最后一行(記錄);
Absolute n 移動到結果集中的第n行。如果n是正值,DBMS從結果集的首部向后或向下移動至第n行;如果n是負數,則DBMS從結果集的底部向前或向上移動n行;
Fetch Absolute 2 From cur_Depart Into @DeptID,@DeptName
Relative n 從指針的當前位置移動n行。如果n是正值,DBMS將行指針向后或向下移動至第n行;如果n是負數,則DBMS將行指針向前或向上移動n行;
Fetch Relative 2 From cur_Depart Into @DeptID,@DeptName
3)基于游標的定位DELETE/UPDATE語句
如果游標是可更新的(也就是說,在定義游標語句中不包括Read Only 參數),就可以用游標從游標數據的源表中DELETE/UPDATE行,即DELETE/UPDATE基于游標指針的當前位置的操作;
舉例:
--刪除當前行的記錄
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
Open cur_Depart
Fetch From cur_Depart into @DeptID,@DeptName
Delete From Department Where CURRENT OF cur_Depart
--更新當前行的內容
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
Open cur_Depart
Fetch From cur_Depart into @DeptID,@DeptName
Update Department Set cDeptID='2007' + @DeptID Where CURRENT OF cur_Depart
3.游標使用技巧及注意
1)利用Order By改變游標中行的順序。此處應該注意的是,只有在查詢的中Select 子句中出現的列才能作為Order by子句列,這一點與普通的Select語句不同;
2)當語句中使用了Order By子句后,將不能用游標來執行定位DELETE/UPDATE語句;如何解決這個問題,首先在原表上創建索引,在創建游標時指定使用此索引來實現;例如:
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department With INDEX(idx_ID)
For Update Of cDeptID,cDeptName
通過在From子句中增加With Index來實現利用索引對表的排序;
3)在游標中可以包含計算好的值作為列;
4)利用@@Cursor_Rows確定游標中的行數;
ALTER FUNCTION SEL_KEYAR(@YEARNUM INT,@f_k_lessonid VARCHAR(15))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @NIAN VARCHAR(8000),@NUMS INT,@NIANS VARCHAR(8000)
SET @NUMS=1
DECLARE GETYEAR CURSOR FOR SELECT f_year FROM t_kejianol WHERE f_k_lessonid=@f_k_lessonid GROUP BY f_year ORDER BY f_year DESC
OPEN GETYEAR
FETCH NEXT FROM GETYEAR INTO @NIAN
WHILE @@FETCH_STATUS=0
BEGIN
IF @YEARNUM=@NUMS
SET @NIANS=ISNULL(@NIANS+',','')+RTRIM(@NIAN)
SELECT @NUMS=@NUMS+1
FETCH NEXT FROM GETYEAR INTO @NIAN
--FETCH ABSOLUTE 3 FROM GETYEAR INTO @NIAN
END
CLOSE GETYEAR
DEALLOCATE GETYEAR
--PRINT @NIANS
RETURN @NIANS
END
ALTER FUNCTION SEL_KEYAR(@YEARNUM INT,@f_k_lessonid VARCHAR(15))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @NIAN VARCHAR(8000),@NIANS VARCHAR(8000)
DECLARE GETYEAR CURSOR FOR SELECT f_year FROM t_kejianol WHERE f_k_lessonid=@f_k_lessonid GROUP BY f_year ORDER BY f_year ASC
OPEN GETYEAR
FETCH ABSOLUTE @YEARNUM FROM GETYEAR INTO @NIAN
CLOSE GETYEAR
DEALLOCATE GETYEAR
RETURN @NIANS
END
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品中文字幕在线观看| 日韩欧美一区二区在线| 亚洲高清av在线| 日韩大片在线观看视频| 亚洲精品乱码久久久久久金桔影视| 欧美性高潮在线| 中文字幕精品av| 亚洲视频在线观看| 国产精品久久久久久久久久久久| 91成品人片a无限观看| 国模叶桐国产精品一区| 亚洲 日韩 国产第一| 亚洲欧美日韩视频一区| 久久综合久久美利坚合众国| 午夜精品蜜臀一区二区三区免费| 久久精品视频99| 38少妇精品导航| 91亚洲精品久久久| 成人久久久久爱| 综合网中文字幕| 亚洲网站在线观看| 日韩av有码在线| 国产精品久久久91| 一本色道久久综合狠狠躁篇怎么玩| 中文字幕久久亚洲| 欧美午夜视频一区二区| 色先锋久久影院av| 欧美激情亚洲一区| 国产不卡精品视男人的天堂| 亚洲人永久免费| 欧美激情久久久久久| 欧美成人精品xxx| 中文日韩在线视频| 久久久久久有精品国产| 一区二区三欧美| 国产欧美日韩亚洲精品| 亚洲欧美在线播放| 国产欧美在线视频| 国产精品久久久久久五月尺| 欧美日韩精品中文字幕| 欧美高清一级大片| 91精品视频免费观看| 成人久久久久久| 亚洲欧美国产精品| 欧美一级高清免费| 日韩av有码在线| 亚洲xxx视频| 日产日韩在线亚洲欧美| 91精品国产成人www| 欧美成人小视频| 一区二区三区天堂av| 国产精品视频网| 黑人巨大精品欧美一区二区一视频| 欧美午夜影院在线视频| 91精品国产综合久久香蕉的用户体验| 久久这里只有精品视频首页| 亚洲性无码av在线| 国产精品网站视频| 97热在线精品视频在线观看| 久久亚洲一区二区三区四区五区高| 91豆花精品一区| 国产成人久久精品| 中国人与牲禽动交精品| 欧美猛交免费看| 91豆花精品一区| 亚洲人精选亚洲人成在线| 精品视频在线播放| 久久亚洲国产精品成人av秋霞| 亚洲精品一区二区三区不| 亚洲v日韩v综合v精品v| 国产精品久久综合av爱欲tv| 国产偷国产偷亚洲清高网站| 亚洲激情成人网| www国产亚洲精品久久网站| 亚洲精品一区在线观看香蕉| 精品欧美一区二区三区| 亚洲天堂av电影| 曰本色欧美视频在线| 日韩欧美综合在线视频| 日韩中文字幕第一页| 中文字幕在线看视频国产欧美在线看完整| 日韩欧美在线网址| 亚洲欧美中文字幕| 久久亚洲春色中文字幕| 国内精品美女av在线播放| 日韩福利伦理影院免费| 亚洲欧洲偷拍精品| 欧美xxxx做受欧美.88| 亚洲欧美色图片| 上原亚衣av一区二区三区| 亚洲v日韩v综合v精品v| 欧美色videos| 欧美成人精品h版在线观看| 久久人91精品久久久久久不卡| 日韩精品极品视频免费观看| 青草成人免费视频| 91精品国产综合久久香蕉最新版| 国产精品久久久久久av福利| 国产精品免费在线免费| 亚洲偷欧美偷国内偷| 日韩av片永久免费网站| 欧美极品美女电影一区| 久久亚洲电影天堂| 亚洲国产天堂久久综合| 日韩电影免费观看在线| 久久精品亚洲精品| 日韩在线一区二区三区免费视频| 欧美精品在线视频观看| 久久久之久亚州精品露出| 亚洲国产成人精品一区二区| 日韩高清欧美高清| 欧美激情视频三区| 欧美激情aaaa| 久久精品一区中文字幕| 欧美日韩国产精品一区二区不卡中文| 亚洲第一综合天堂另类专| 国产盗摄xxxx视频xxx69| 午夜精品一区二区三区在线视| 欧美最猛性xxxxx免费| 欧美在线视频a| 久久久久久国产精品三级玉女聊斋| 欧美专区在线播放| 最新91在线视频| 欧美在线视频观看| 91在线观看免费网站| 国产日韩精品在线观看| 一区二区三区视频免费| 欧美性猛交xxxx免费看| 51ⅴ精品国产91久久久久久| 久久久久久久久久久久av| 亚洲一区免费网站| 欧美性感美女h网站在线观看免费| 精品美女永久免费视频| 亚洲影院色无极综合| 欧美日韩免费区域视频在线观看| 欧美第一黄网免费网站| 国产精品视频大全| 欧美www视频在线观看| 欧美日韩一区二区三区| 亚洲一区亚洲二区亚洲三区| 大胆欧美人体视频| 日韩免费视频在线观看| 久久91精品国产91久久跳| 成人疯狂猛交xxx| 久热精品视频在线观看| 国产精品白嫩美女在线观看| 91久久在线观看| 国产精品久久999| 亚洲欧美国内爽妇网| 国内精品视频一区| 亚洲乱码国产乱码精品精天堂| 亚洲欧美日韩精品久久奇米色影视| 国产欧美日韩专区发布| 欧美成人中文字幕| 国外成人性视频| 亚洲午夜激情免费视频| 成人乱人伦精品视频在线观看| 国产日韩欧美在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲自拍欧美另类| 国产精品老女人精品视频| 亚洲影院高清在线| 久久综合伊人77777蜜臀| 91精品中国老女人|