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

歡迎訪問 生活随笔!

生活随笔

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

数据库

SQL SERVER 参考:游标(Cursor)的讲解与实例

發布時間:2023/11/29 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL SERVER 参考:游标(Cursor)的讲解与实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在數據庫中,游標是一個十分重要的概念。游標提供了一種對從表中檢索出的數據進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。游標總是與一條T_SQL 選擇語句相關聯,因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。

當決定對結果集進行處理時,必須聲明一個指向該結果集的游標。如果曾經用 C 語言寫過對文件進行處理的程序,那么游標就像您打開文件所得到的文件句柄一樣,只要文件打開成功,該文件句柄就可代表該文件。對于游標而言,其道理是相同的。可見游標能夠實現按與傳統程序讀取平面文件類似的方式處理來自基礎表的結果集,從而把表中數據以平面文件的形式呈現給程序。

我們知道關系數據庫管理系統實質是面向集合的,在MS SQL SERVER 中并沒有一種描述表中單一記錄的表達形式,除非使用where 子句來限制只有一條記錄被選中。因此我們必須借助于游標來進行面向單條記錄的數據處理。
????
由此可見,游標允許應用程序對查詢語句select 返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;它還提供對基于游標位置而對表中數據進行刪除或更新的能力;而且,正是游標把作為面向集合的數據庫管理系統和面向行的程序設計兩者聯系起來,使兩個數據處理方式能夠進行溝通。

每一個游標必須有四個組成部分這四個關鍵部分必須符合下面的順序;

1.DECLARE 游標
2.OPEN 游標
3.從一個游標中FETCH 信息
4.CLOSE 或DEALLOCATE 游標

通常我們使用DECLARE 來聲明一個游標聲明一個游標主要包括以下主要內容:

游標名字
數據來源(表和列)
選取條件
屬性(僅讀或可修改)
其語法格式如下:

DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR
FOR select_statement
[FOR {READ ONLY | UPDATE [OF column_name [,...n]]}]

其中:
cursor_name 指游標的名字。

INSENSITIVE

表明MS SQL SERVER 會將游標定義所選取出來的數據記錄存放在一臨時表內(建立在tempdb 數據庫下)。對該游標的讀取操作皆由臨時表來應答。因此,對基本表的修改并不影響游標提取的數據,即游標不會隨著基本表內容的改變而改變,同時也無法通過游標來更新基本表。如果不使用該保留字,那么對基本表的更新、刪除都會反映到游標中。

游標指針示意圖

詳細:

1.定義一個標準游標:

declare mycursor cursor for select * from yuangong

2.定義一個只讀游標:

declare mycursor cursor for select * from yuangong for read only

3.定義一個可寫游標:

declare mycursor1 cursor for select * from yuangong for update of

姓名,性別,年齡,基本工資,獎金,所得稅,應發工資
注: scroll 只能對只讀游標起作用

4.打開游標:open 游標名

如:

declare mycursor cursor for select * from yuangong
open mycursor

5.從游標中取數據:fetch,默認情況下,指針指向第一條記錄之前

移動記錄指針的方法:
NEXT?? 下移一條記錄
prior 上移一條記錄
first 第一條記錄
LAST?? 最后一條記錄
absolute n 絕對記錄 第N條記錄

取數據語法:

fetch next|prior|first|last|absolute n????from 游標名 [into 變量名列表]

6.關閉游標: close 游標名
暫時關閉游標,還可再使用OPEN打開.

7.釋放游標: deallocate 游標名

從內存中清除游標.如果還想使用,必須再次聲明.

對當前游標狀態進行判斷:

8. @@fetch_status 如果返回是0,說明當前操作是成功的.否則是失敗的.
0 FETCH 語句成功。
-1 FETCH 語句失敗或此行不在結果集中。
-2 被提取的行不存在。

舉例1:

利用游標從學生表中逐條讀取所有數據:

declare @i INT
DECLARE @TN CHAR(8),@FU CHAR(20)
declare mycursor cursor for select sno,sname from student
open mycursor
select @i=count(*) from student
while @@fetch_status=0 and @i>1
BEGIN
????
fetch next from mycursor INTO @TN,@FU
????
set @i=@i-1
PRINT @TN + ' ' + @FU
END
close mycursor
deallocate mycursor

結果:
s1001??? Jack Dong??????????
s1002??? Lucy Dong??????????
s1003??? Brezse Dong????????
s1004??? Andy Liu???????????
s1005??? Jack Chen??

舉例2:

通過游標對讀取的數據進行操作,并輸出不同的結果:

declare @s_name varchar(20),@c_name VARCHAR(64),@sc_core int
declare my_cur cursor for select sname,cname,scgrade
from student s, course c, studentCourse sc WHERE s.sno=sc.sno AND c.cno=sc.cno
open my_cur
print space(27)+'2007年計算機專業考試系統'
fetch next from my_cur into @s_name,@c_name,@sc_core
while @@fetch_status=0
begin
????
if @sc_core<60
????
begin
????????
print space(20)+@s_name+ @c_name +':不及格 '
????
end
????
else
????
begin
??????????
if @sc_core >=60 and @sc_core <70
??????????
begin
??????????????
print space(20)+@s_name??+ @c_name +':及格 '
??????????
end
??????????
else
??????????
begin
??????????????
if @sc_core>=70 and @sc_core<80
??????????????
begin
??????????????????
print space(20)+@s_name + @c_name +':良好'
??????????????
end
??????????????
else
??????????????
begin
??????????????????
print space(20)+@s_name + @c_name +':優秀'
??????????????
end
??????????
end
????
end
fetch next from my_cur into @s_name,@c_name,@sc_core
end
close my_cur
deallocate my_cur

結果:
???????????????????????????? 2007年計算機專業考試系統
??????????????????? Jack Dong?????????????????????????????? C++ 程序設計:及格
??????????????????? Jack Dong?????????????????????????????? 操作系統:良好
??????????????????? Lucy Dong?????????????????????????????? C++ 程序設計:優秀
??????????????????? Lucy Dong?????????????????????????????? 計算機組成原理:良好
??????????????????? Brezse Dong???????????????????????????? C++ 程序設計:優秀
??????????????????? Brezse Dong???????????????????????????? 面向對象的程序設計方法:不及格
??????????????????? Andy Liu??????????????????????????????? 操作系統:不及格
??????????????????? Andy Liu??????????????????????????????? 計算機組成原理:優秀

使用游標時應注意的問題:
 
(1) 盡管使用游標比較靈活,可以實現對數據集中單行數據的直接操作,但游標會在下面幾個方面影響系統的性能:
-使用游標會導致頁鎖與表鎖的增加
-導致網絡通信量的增加
-增加了服務器處理相應指令的額外開銷

(2) 使用游標時的優化問題:
-明確指出游標的用途:for read only或for update
-在for update后指定被修改的列

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的SQL SERVER 参考:游标(Cursor)的讲解与实例的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 在线中文字幕播放 | 日韩一区二区三区在线播放 | 91日批 | 亚洲人体视频 | 亚洲性图视频 | 校园伸入裙底揉捏1v1h | 中文字幕日韩久久 | 一区久久 | 日韩精品资源 | cao在线| 欧美成人精品 | 91香蕉视频在线 | 手机看片1024日韩 | 成人午夜免费视频 | 国产日韩欧美一区二区东京热 | 秋霞99 | 精品亚洲国产成av人片传媒 | 操穴网站 | 欧美成人一二区 | 精品一区二区在线观看 | 亚洲午夜无码av毛片久久 | 色哟哟在线观看视频 | 亚洲在线视频免费观看 | 欧美熟妇另类久久久久久多毛 | 亚洲熟女综合一区二区三区 | 亚洲精品久久久久avwww潮水 | 神马久久久久久久 | 亚洲成人网络 | 亚洲综合国产精品 | 日韩一级片在线观看 | 狠狠gao| 国产在线123 | 91区国产| 嫩嫩av| 欧美一极片 | 久久久久无码精品国产sm果冻 | 91看片黄色 | 亚洲性喷水 | 麻豆影音先锋 | 日韩精品手机在线 | 中文字幕久久综合 | 成人毛片软件 | 一区二区三区四区影院 | 无码任你躁久久久久久老妇 | 精品在线观看一区二区 | 色狠狠一区二区 | 国产高清中文字幕 | 亚洲成人一区在线 | 精品国产一区二区三区久久狼黑人 | 天天草夜夜草 | 久久男女视频 | 久久麻豆视频 | 人人妻人人玩人人澡人人爽 | 在线免费黄色 | 91丨porny丨中文 | 亚洲天堂777 | 黑人玩弄人妻一区二区三区 | 精品熟妇一区二区三区 | 午夜免费毛片 | 成人激情社区 | 中国一及毛片 | 国产一级淫片免费 | 国产成人精品一区二区三区在线 | 亚洲精品成人无码 | 国产精品久久久久久久久岛 | 视频一区国产精品 | 亚洲AV无码成人精品区麻豆 | 国产情侣激情自拍 | 久久精品免费在线观看 | 亚洲91在线 | 久久免费精品国产 | 国产日韩综合 | 精品综合久久久 | 一本色道综合久久欧美日韩精品 | 国产黄页| 成人国产精品免费 | 中文字幕爱爱 | 国产乱淫av | 欧美日韩一区二区三区在线电影 | 色福利hd写真video | 国产一二三区免费视频 | 国产人妻人伦精品1国产丝袜 | 久久艹国产精品 | 亚洲伊人av| 国产福利小视频在线观看 | 天天色综合天天 | 欧美日韩卡一卡二 | 九九在线视频 | 日韩免费观看 | 色综合五月婷婷 | 国产精品偷乱一区二区三区 | 日本色图片 | 天天爽夜夜春 | 美国一级特黄 | 国产成人精品综合在线观看 | 在线视频h | а√天堂www在线天堂小说 | 中文字幕www| 日本特级黄色录像 |