資源描述:
《關(guān)于sqlserverdeclare游標(biāo)的詳細介紹》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、關(guān)于SQLServerDECLARE游標(biāo)的詳細介紹?SQLServer是一個關(guān)系數(shù)據(jù)庫管理系統(tǒng)。它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發(fā)的,于1988年推出了第一個OS/2版本。在WindowsNT推出后,Microsoft與Sybase在SQLServer的開發(fā)上就分道揚鑣了,Microsoft將SQLServer移植到WindowsNT系統(tǒng)上,專注于開發(fā)推廣SQLServer的WindowsNT版本。Sybase則較專注于SQLServer在UNⅨ操作系統(tǒng)上的應(yīng)用。專職優(yōu)化、數(shù)據(jù)庫、域名注冊、網(wǎng)站空間、虛擬主機、服務(wù)器托管、vps主機、
2、服務(wù)器租用的中國信息港在這里為你做詳細介紹!1.定義游標(biāo)定義游標(biāo)語句的核心是定義了一個游標(biāo)標(biāo)識名,并把游標(biāo)標(biāo)識名和一個查詢語句關(guān)聯(lián)起來。DECLARE語句用于聲明游標(biāo),它通過SELECT查詢定義游標(biāo)存儲的數(shù)據(jù)集合。語句格式為:DECLARE游標(biāo)名稱[INSENSITIVE][SCROLL]CURSORFORselect語句[FOR{READONLY
3、UPDATE[OF列名字表]}]參數(shù)說明:INSENSITIVE選項:說明所定義的游標(biāo)使用SELECT語句查詢結(jié)果的拷貝,對游標(biāo)的操作都基于該拷貝進行。因此,這期間對游標(biāo)基本表的數(shù)據(jù)修改不能反映到游標(biāo)中。這種游標(biāo)也不允許通過它修改基本表
4、的數(shù)據(jù)。SCROLL選項:指定該游標(biāo)可用所有的游標(biāo)數(shù)據(jù)定位方法提取數(shù)據(jù),游標(biāo)定位方法包括PRIOR、FIRST、LAST、ABSOLUTEn和RELATIVEn選項。Select語句:為標(biāo)準(zhǔn)的SELECT查詢語句,其查詢結(jié)果為游標(biāo)的數(shù)據(jù)集合,構(gòu)成游標(biāo)數(shù)據(jù)集合的一個或多個表稱作游標(biāo)的基表。在游標(biāo)聲明語句中,有下列條件之一時,系統(tǒng)自動把游標(biāo)定義為INSENSITIVE游標(biāo):SELECT語句中使用了DISTINCT、UNION、GROUPBY或HAVING等關(guān)鍵字;任一個游標(biāo)基表中不存在唯一索引。其他READONLY選項:說明定義只讀游標(biāo)。UPDATE[OF列名字表]選項:定義游標(biāo)可修改
5、的列。如果使用OF列名字表選項,說明只允許修改所指定的列,否則,所有列均可修改。例如,查詢教師名字和所教的課程名,定義游標(biāo)TCURSOR的語句如下:DECLARETCURSORCURSORFORSELECTtname,cnameFROMteacher,couseWHEREteacher.tno=couse.tno2.打開游標(biāo)打開游標(biāo)語句執(zhí)行游標(biāo)定義中的查詢語句,查詢結(jié)果存放在游標(biāo)緩沖區(qū)中。并使游標(biāo)指針指向游標(biāo)區(qū)中的第一個元組,作為游標(biāo)的缺省訪問位置。查詢結(jié)果的內(nèi)容取決與查詢語句的設(shè)置和查詢條件。打開游標(biāo)的語句格式:EXECSQLOPEN〈游標(biāo)名〉如果打開的游標(biāo)為INSENSITIV
6、E游標(biāo),在打開時將產(chǎn)生一個臨時表,將定義的游標(biāo)數(shù)據(jù)集合從其基表中拷貝過來。SQLServer中,游標(biāo)打開后,可以從全局變量@@CURSOR_ROWS中讀取游標(biāo)結(jié)果集合中的行數(shù)。例1:打開前面所創(chuàng)建的查詢教師姓名和所教課名稱的游標(biāo)。OPENtcursor例2:顯示游標(biāo)結(jié)果集合中數(shù)據(jù)行數(shù)SELECT數(shù)據(jù)行數(shù)=@@CURSOR_ROWS3.讀游標(biāo)區(qū)中的當(dāng)前元組讀游標(biāo)區(qū)數(shù)據(jù)語句是讀取游標(biāo)區(qū)中當(dāng)前元組的值,并將各分量依次賦給指定的共享主變量。FETCH語句用于讀取游標(biāo)中的數(shù)據(jù),語句格式為:FETCH[[NEXT
7、PRIOR
8、FIRST
9、LAST
10、ABSOLUTEn
11、RELATIVEn]FRO
12、M]游標(biāo)名[INTO@變量1,@變量2,….]其中:NEXT:說明讀取游標(biāo)中的下一行,第一次對游標(biāo)實行讀取操作時,NEXT返回結(jié)果集合中的第一行。PRIOR、FIRST、LAST、ABSOLUTEn和RELATIVEn選項只適用于SCROLL游標(biāo)。它們分別說明讀取游標(biāo)中的上一行、第一行、最后一行、第n行和相對于當(dāng)前位置的第n行。n為負(fù)值時,ABSOLUTEn和RELATIVEn說明讀取從游標(biāo)結(jié)果集合中的最后一行或當(dāng)前行倒數(shù)n行的數(shù)據(jù)。INTO子句說明將讀取的數(shù)據(jù)存放到指定的局部變量中,每一個變量的數(shù)據(jù)類型應(yīng)與游標(biāo)所返回的數(shù)據(jù)類型嚴(yán)格匹配,否則將產(chǎn)生錯誤。如果游標(biāo)區(qū)的元組已經(jīng)讀完,那
13、么系統(tǒng)狀態(tài)變量SQLSTATE的值被設(shè)為02000,意為"notuplefound"。例如,讀取tcursor中當(dāng)前位置后的第二行數(shù)據(jù)FETCHRELATIVE2FROMtcursor4.利用游標(biāo)修改數(shù)據(jù)SQLServer中的UPDATE語句和DELETE語句也支持游標(biāo)操作,它們可以通過游標(biāo)修改或刪除游標(biāo)基表中的當(dāng)前數(shù)據(jù)行。UPDATE語句的格式為:UPDATEtable_nameSET列名=表達式}[,…n]WHERECURRENTOFcursor_nameDELE