999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于SQL游標的數據庫應用與探析

2017-05-08 14:57:49張潤方繼才
智能計算機與應用 2016年6期

張潤++方繼才

摘要:針對一些數據操作直接使用SQL語句無法處理的問題,在深入分析此類問題遍歷操作的基礎上,文中結合SQL中的游標相關知識和使用規則,給出了一種基于SQL游標的數據處理方法,最后在SQL Server 2012環境的基礎上,對研究所述進行了相關驗證,驗證結果表明此類方法的有效性。

關鍵詞: SQL Server; 游標; 結果集; 遍歷

中圖分類號: TP391

文獻標志碼: A

文章編號:2095-2163(2016)06-0084-04

0引言

SQL Server 2012是一款功能完善、且設計高端的關系型數據庫管理系統,關系型數據庫中的數據操作通常都是面向整個結果集的,而結果集又是由Select、Update、Insert等語句返回的所有滿足Where子句條件的行。在數據庫的開發過程中,常常使用T-SQL語句將整個結果集作為一個單元來進行處理,然而實際上很多時候用戶需要對結果集中的某一行或者多行分設相同或不同的操作,例如要從結果集中逐一讀取每一條記錄、更新或者刪除結果集對應表中某一行的數據等等,此時若僅是運用T-SQL語句則將無法滿足這一功能需求,為此就需要借助于游標機制來實現逐條記錄的數據處理\[1\]。而且,還有很多應用程序,尤其是將SQL 嵌入到其它開發語言時,這些語言或程序并不能把整個結果集作為一個單元來開展有效的控制處理,而只能處理一行或者部分行,這時候就更加需要使用游標。

[BT4]1SQL游標的概述

游標作為數據庫的重要對象,不僅表現為一種數據訪問機制,同時也是一種數據處理方法,具有對結果集進行逐行處理的能力;而且,游標還提供了一種對從表中檢索出的數據定制各類操作的靈活手段。就本質而言,游標實際上即是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制\[2\]。游標就好比C語言中的指針,通過與某個查詢結果構建技術聯系,可以指定結果集中的任何位置,然后允許用戶對指定位置的數據進行處理,以達到用戶處理數據的復雜目的需求,如:在結果集中一次一行或者多行向前或向后瀏覽數據的操作。

在游標的實現上,則總是與一條T-SQL語句相關聯。這是因為游標是由結果集和結果集中指向特定記錄的游標位置集結聯合所組成,組成示意如圖1所示。其中,游標結果集是定義游標的SQL語句返回的行的集合,游標位置則是指向這個行集合中某一行的當前指針。在SQL Server中,用戶可以通過SQL語句逐一地從游標中讀取記錄,還可以使用游標處理結果集中的數據,具體包括了更新、刪除等操作。

2SQL游標的作用及優勢

在SQL Server中,游標主要是用來對結果集引入“行集”性質的相關操作。也就是說,當在存儲過程、觸發器和批處理中使用T-SQL語句返回結果集的多條記錄時,游標則給出了一個可以對記錄進行逐條處理的有效方法。

研究可得,使用游標的重點效應優勢可作如下闡析:

1)游標允許用戶訪問或處理一個集合里的單獨數據行,而不受其他行的限制約束,這也是游標設計上的鮮明優勢。基于此,用戶就可以使用這些數據生成SQL代碼并立即執行或輸出,這樣就能降低系統開銷和潛在的阻隔情況。

2)使用游標查看或處理數據使得用戶的操作過程更加靈活、高效、方便。

3)在SQL Server數據庫系統中,游標可分為服務器游標和客戶游標。相對于客戶游標而言,服務器游標可以大大減少網絡數據傳輸的開銷,從而提高應用程序訪問數據庫的速度和效率。

4)作為面向集合的數據庫管理系統(RDBMS)和面向行的程序設計之間的設計媒介,游標可使得這2種處理方式能夠獲得有效拓展連接\[3\]。

[BT4]3SQL游標的使用

SQL游標一般用于存儲過程、觸發器和Transact-SQL腳本中。在SQL Server中使用游標處理數據時需要遵循一定的規則,研究給出其使用流程如圖2所示。

從圖 2 中可以看出,SQL游標的使用流程可具體表述如下:首先聲明游標,然后打開游標,再從游標中提取數據應用于相關操作,直至所有記錄均已標明處理,由此即關閉并釋放游標。

[BT5]3.1游標的聲明

與變量一樣,在游標使用前也要預先設定游標聲明。通過聲明來定義游標的名稱、游標指向的結果集和游標的屬性。簡單的示例語句為:

Declare cur_xsxx Cursor For Select xh,xm,xb,sfz From xsxx;

該語句定義了一個名為cur_xsxx 的游標,且指向一個從xsxx(學生信息表)表中查詢出xh、xm、xb和sfz字段內容的結果集。

在上述示例語句中,游標名稱Cursor_name(游標變量@Cursor_name)是用戶此后若涉及到該游標時將會使用的名字,關鍵字Cursor指明此變量是游標類型,關鍵字For和Select語句定義了游標的內容。此外,聲明游標的T-SQL語句還提供了一些更多的關鍵字選項,如Scroll、Static、Read_Only等等,各個選項也將呈現各不相同的作用。

[BT5]3.2游標的打開

游標在發出聲明后,必須使用Open語句來打開游標,才能展開進一步的數據提取。打開游標的示例語句為:

Open cur_xsxx。

打開游標時,需要注意兩點:

1)若打開的是全局游標,則必須添加關鍵字Global,否則打開的就將是默認的局部游標。

2)游標的打開可能會產生問題,SQL Server即是通過@@Error全局變量的值來判斷游標打開的成功與否:為0表示成功,為1表示失敗。

[BT5]3.3游標的提取

打開游標后,就可以讀取游標中的數據了。提取游標的示例語句為:

Fetch Next From cur_xsxx into @xh,@xm。

該語句表示將游標結果集所指的記錄中字段xh和xm的值賦給局部變量@xh和@xm中。在讀取游標時,數據所在的記錄位置總共設有6個關鍵字(Next、Prior、First、Last、Absolute和Relative)用于條件選擇。

[BT5]3.4游標的關閉和釋放

在游標使用進程結束后,要及時關閉和釋放游標,以利于服務器釋放曾分配給游標占用的SQL Server系統資源。關閉游標的示例語句為:

Close cur_xsxx;

釋放游標的示例語句為:

Deallocate cur_xsxx。

游標被釋放后就不能重新打開了,除非再次重新聲明游標。

[BT4]4SQL游標的應用實例與分析

游標的應用重點可表現在2個方面:

1)使用游標從結果集中檢索數據,以實現對數據的逐行查看,也就是平時經常遇到的一種操作——遍歷。

2)使用游標可以對結果集中的數據進行更新或刪除\[4\]。改變游標中的數據,自然會影響到數據庫中基礎表的數據,若要使游標中的數據不致發生修改,則可以在聲明游標時添加Insensitive選項。

在此,將以某個學校學費收繳管理系統中的學校收費數據庫為背景,研究給出2個具體實例來闡釋說明SQL Server中游標的使用方法和應用實現。

[BT5]4.1游標的遍歷

4.1.1應用說明

所謂遍歷,就是指沿著某條搜索路線,依次對樹中的每個結點均將經歷一次的訪問。而對于游標的遍歷而言,游標所對應的結果集是指樹,結果集中的每一條記錄(每一行)是指每個結點,游標的遍歷實際上就是指游標的逐行取數操作。

在SQL Server中,游標的使用主要集中在對游標所指結果集的遍歷操作。通常在執行Fetch語句(讀取游標數據)的時候,可以借助于全局變量@@Fetch_Status(返回游標當前的狀態)的值來判斷提取數據的操作是否成功。若值為0,表明讀取數據成功;若值為-1,表明執行失敗或此行不在結果集中;若值為-2,表明讀取的數據行不存在。在實際研發中,Fetch語句經常和While語句結合使用來生成對結果集中的每一行數據實現遍歷的操作。下面則通過一個完整實例來直觀展現游標便利的功能應用流程。

4.1.2實例分析

[HT5”H][ST5”HZ]實例一[HT5”SS][ST5”BZ]利用游標遍歷從xxsf數據庫的xsxx(學生信息表)和zysf(專業收費表)中顯示所有文學院學生的專業代碼(zydm)、專業名稱(zymc)、隸屬院系(lsyx)、學號(xh)和姓名(xm),并以報表的形式提供結果輸出。

當前數據庫的基礎表xsxx和zysf,表的結構可如表1和表2,字段zydm、zymc和lsyx來源于表2,字段zydm、xh和xm來源于表1。2張表將通過公共字段zydm建立連接。

4.2使用游標更新數據

4.2.1應用說明

游標在聲明的時候若定義為可更新的,則可用Update語句來修改基礎表中某行的數據,當然也可以執行刪除某行的操作,但不能插入新行。

一般情況下,在Where子句中給定了條件才能修改或刪除數據,但鑒于游標不能自動對行實現更新或刪除的原因,因此在聲明游標的時候使用了For Update Of語句,這樣就可以在Update或Delete命令中利用Where Current Of關鍵字直接修改或刪除當前游標中存儲的數據,而不必使用Where子句重新給出指定條件\[5\]。

4.2.2實例分析

[HT5”H][ST5”HZ]實例二[HT5”SS][ST5”BZ]利用游標將數據表xsxx中第3位同學的入學年份(rxnf)改為2012年(這里只顯示xsxx表中的rxnf、xh、xm、xb和sfz字段)。

關鍵代碼如下:

DECLARE cur_xg SCROLL CURSOR FOR

SELECT rxnf,xh,xm,xb,sfz from xsxx

FOR UPDATE OF rxnf --定義表中需要修改的數據列

OPEN cur_xg

FETCH ABSOLUTE 3 FROM cur_xg--返回第3行并將其變為當前行

UPDATE xsxx SET rxnf=2012--更新當前行的列值

WHERE CURRENT OF cur_xg--當前游標指針所指的當前行數據

CLOSE cur_xg

DEALLOCATE cur_xg

這里需要注意的是,游標的第二種應用是一種不規范的更新數據的途徑,很容易造成數據的不一致,因此通常狀況下并不選用游標來設計更新數據表中的數據。

另外,還需提及的就是,本文實例所用的數據表均基于xxsf(學校收費數據庫)中的2個表,分別是:

xsxx(rxnf,xh,xm,xb,ksh,sfz,zydm,zsid)

zysf(zydm,zymc,lsyx,pycc,xxnx,xfbz,jcfbz)

[BT4]5結束語

SQL Server中的游標在原理上具有C語言指針一樣的語言結構,相應地則設計提供了一種在服務器內部處理結果集的方法。使用游標可以通過遍歷操作逐一地從結果集中實現數據讀取,也可以對結果集中某些數據重點加設更新或刪除的操作。本文以學校收費數據庫為背景并結合具體的實例來闡述游標的使用,游標可以面向結果集中的每一行進行相同或不同的操作,這不僅提升了SQL語句處理復雜查詢的能力,而且還降低了系統開銷和潛在的阻隔情況,在一定程度上解決了許多應用程序不能把整個結果集作為一個單元來處理的問題。

參考文獻:

趙慧玲,毛應爽,孟憲穎. 基于SQL游標的研究與應用[J]. 科技創新導報,2012(28):31-32.

[2] 劉志成,寧云智,劉釗,編著. SQL Server實例教程[M]. 北京:電子工業出版社,2013.

[3] 薛麗香,汪東芳. 淺談SQL Server數據庫中游標的使用[J]. 福建電腦,2016(6):157-158.

[4] 陳芳勤. SQL Server 2000中游標的應用[J]. 中國科技信息,2008(13):96,99.

[5] 黃龍軍. 游標在Online Judge中的應用[J]. 紹興文理學院學報(自然科學),2012,32(8):26-29.

主站蜘蛛池模板: 激情影院内射美女| www.国产福利| 成人免费午间影院在线观看| 亚洲精品中文字幕午夜| 欧美A级V片在线观看| 在线毛片网站| 成人av专区精品无码国产| 99精品国产高清一区二区| 日韩福利在线视频| 69av在线| 她的性爱视频| 人妖无码第一页| 大陆精大陆国产国语精品1024| 国产乱子伦无码精品小说| 91视频区| 特级aaaaaaaaa毛片免费视频| 五月婷婷精品| 欧美日韩精品一区二区视频| 久久人搡人人玩人妻精品| 欧美精品一二三区| 伊人色在线视频| 国产精品3p视频| 直接黄91麻豆网站| a毛片在线| 中文字幕调教一区二区视频| 国产91无码福利在线 | 国产精品99久久久久久董美香| 人人91人人澡人人妻人人爽| 国产在线自乱拍播放| 免费午夜无码18禁无码影院| 天天激情综合| 国产成人综合亚洲欧洲色就色| 无码AV日韩一二三区| 欧美成人影院亚洲综合图| 亚洲高清在线天堂精品| 国产网友愉拍精品视频| 亚洲中文字幕23页在线| 国产男女XX00免费观看| 欧美精品1区| 久久国产毛片| 国产激情影院| 韩国v欧美v亚洲v日本v| 午夜a级毛片| 国产清纯在线一区二区WWW| 精品一区二区无码av| 国产成人亚洲精品色欲AV| 欧洲免费精品视频在线| 国产欧美日韩91| 国产尤物在线播放| 中文字幕乱码中文乱码51精品| 日本三级欧美三级| 91欧洲国产日韩在线人成| 色婷婷色丁香| 国内精品久久久久久久久久影视| 亚洲AV免费一区二区三区| 国产成人三级在线观看视频| 国产黄色爱视频| 成人日韩欧美| 欧美精品H在线播放| 亚洲婷婷丁香| 九色在线观看视频| 欧美精品一二三区| 日韩精品亚洲一区中文字幕| 欧美成人怡春院在线激情| 香蕉久人久人青草青草| 日本在线免费网站| 国产精品成人久久| 国产欧美视频在线观看| a在线亚洲男人的天堂试看| 91网在线| 国产一级裸网站| 思思热在线视频精品| 在线观看无码a∨| 91福利免费| 国产精品无码AV片在线观看播放| 亚洲国产成人麻豆精品| 国产成人精品高清在线| 亚洲欧美一区二区三区蜜芽| 中文字幕啪啪| 日韩a级毛片| 伊人大杳蕉中文无码| 午夜国产不卡在线观看视频|