2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、SQLSERVER游標(biāo)詳解游標(biāo)詳解游標(biāo)和游標(biāo)的優(yōu)點(diǎn)游標(biāo)和游標(biāo)的優(yōu)點(diǎn)在數(shù)據(jù)庫(kù)中,游標(biāo)是一個(gè)十分重要的概念。游標(biāo)提供了一種對(duì)從表中檢索出的數(shù)據(jù)進(jìn)行操作的靈活手在數(shù)據(jù)庫(kù)中,游標(biāo)是一個(gè)十分重要的概念。游標(biāo)提供了一種對(duì)從表中檢索出的數(shù)據(jù)進(jìn)行操作的靈活手段,就本質(zhì)而言,游標(biāo)實(shí)際上是一種能從包括多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄的機(jī)制。游標(biāo)段,就本質(zhì)而言,游標(biāo)實(shí)際上是一種能從包括多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄的機(jī)制。游標(biāo)總是與一條總是與一

2、條T_SQL選擇語(yǔ)句相關(guān)聯(lián)因?yàn)橛螛?biāo)由結(jié)果集(可以是零條、一條或由相關(guān)的選擇語(yǔ)句檢索出選擇語(yǔ)句相關(guān)聯(lián)因?yàn)橛螛?biāo)由結(jié)果集(可以是零條、一條或由相關(guān)的選擇語(yǔ)句檢索出的多條記錄)和結(jié)果集中指向特定記錄的游標(biāo)位置組成。當(dāng)決定對(duì)結(jié)果集進(jìn)行處理時(shí),必須聲明一個(gè)指的多條記錄)和結(jié)果集中指向特定記錄的游標(biāo)位置組成。當(dāng)決定對(duì)結(jié)果集進(jìn)行處理時(shí),必須聲明一個(gè)指向該結(jié)果集的游標(biāo)。如果曾經(jīng)用向該結(jié)果集的游標(biāo)。如果曾經(jīng)用C語(yǔ)言寫過對(duì)文件進(jìn)行處理的程序,那么游標(biāo)就像您打

3、開文件所得到的語(yǔ)言寫過對(duì)文件進(jìn)行處理的程序,那么游標(biāo)就像您打開文件所得到的文件句柄一樣,只要文件打開成功,該文件句柄就可代表該文件。對(duì)于游標(biāo)而言,其道理是相同的??晌募浔粯樱灰募蜷_成功,該文件句柄就可代表該文件。對(duì)于游標(biāo)而言,其道理是相同的??梢娪螛?biāo)能夠?qū)崿F(xiàn)按與傳統(tǒng)程序讀取平面文件類似的方式處理來(lái)自基礎(chǔ)表的結(jié)果集,從而把表中數(shù)據(jù)以平見游標(biāo)能夠?qū)崿F(xiàn)按與傳統(tǒng)程序讀取平面文件類似的方式處理來(lái)自基礎(chǔ)表的結(jié)果集,從而把表中數(shù)據(jù)以平面文件

4、的形式呈現(xiàn)給程序。面文件的形式呈現(xiàn)給程序。我們知道關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)實(shí)質(zhì)是面向集合的,在我們知道關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)實(shí)質(zhì)是面向集合的,在MSSQLSERVER中并沒有一種描述表中單一中并沒有一種描述表中單一記錄的表達(dá)形式,除非使用記錄的表達(dá)形式,除非使用where子句來(lái)限制只有一條記錄被選中。因此我們必須借助于游標(biāo)來(lái)進(jìn)行面子句來(lái)限制只有一條記錄被選中。因此我們必須借助于游標(biāo)來(lái)進(jìn)行面向單條記錄的數(shù)據(jù)處理。向單條記錄的數(shù)據(jù)處理。由此可見,游標(biāo)

5、允許應(yīng)用程序?qū)Σ樵冋Z(yǔ)句由此可見,游標(biāo)允許應(yīng)用程序?qū)Σ樵冋Z(yǔ)句返回的行結(jié)果集中每一行進(jìn)行相同或不同的操作,而返回的行結(jié)果集中每一行進(jìn)行相同或不同的操作,而不是一次對(duì)整個(gè)結(jié)果集進(jìn)行同一種操作;它還提供對(duì)基于游標(biāo)位置而對(duì)表中數(shù)據(jù)進(jìn)行刪除或更新的能力;不是一次對(duì)整個(gè)結(jié)果集進(jìn)行同一種操作;它還提供對(duì)基于游標(biāo)位置而對(duì)表中數(shù)據(jù)進(jìn)行刪除或更新的能力;而且,正是游標(biāo)把作為面向集合的數(shù)據(jù)庫(kù)管理系統(tǒng)和面向行的程序設(shè)計(jì)兩者聯(lián)系起來(lái),使兩個(gè)數(shù)據(jù)處理而且,正是游標(biāo)把

6、作為面向集合的數(shù)據(jù)庫(kù)管理系統(tǒng)和面向行的程序設(shè)計(jì)兩者聯(lián)系起來(lái),使兩個(gè)數(shù)據(jù)處理方式能夠進(jìn)行溝通。方式能夠進(jìn)行溝通。游標(biāo)種類游標(biāo)種類MSSQLSERVER支持三種類型的游標(biāo):支持三種類型的游標(biāo):Transact_SQL游標(biāo),游標(biāo),API服務(wù)器游標(biāo)和客戶游標(biāo)。服務(wù)器游標(biāo)和客戶游標(biāo)。(1)Transact_SQL游標(biāo)游標(biāo)Transact_SQL游標(biāo)是由游標(biāo)是由DECLARECURS語(yǔ)法定義、主要用在語(yǔ)法定義、主要用在Transact_SQL腳本、

7、存儲(chǔ)過程腳本、存儲(chǔ)過程和觸發(fā)器中。和觸發(fā)器中。Transact_SQL游標(biāo)主要用在服務(wù)器上,由從客戶端發(fā)送給服務(wù)器的游標(biāo)主要用在服務(wù)器上,由從客戶端發(fā)送給服務(wù)器的Transact_SQL語(yǔ)句語(yǔ)句或是批處理、存儲(chǔ)過程、觸發(fā)器中的或是批處理、存儲(chǔ)過程、觸發(fā)器中的Transact_SQL進(jìn)行管理。進(jìn)行管理。Transact_SQL游標(biāo)不支持提取數(shù)據(jù)塊游標(biāo)不支持提取數(shù)據(jù)塊或多行數(shù)據(jù)?;蚨嘈袛?shù)據(jù)。(2)API游標(biāo)游標(biāo)API游標(biāo)支持在游標(biāo)支持在OL

8、EDB,ODBC以及以及DB_library中使用游標(biāo)函數(shù),主要用在服務(wù)器上。每一次客中使用游標(biāo)函數(shù),主要用在服務(wù)器上。每一次客戶端應(yīng)用程序調(diào)用戶端應(yīng)用程序調(diào)用API游標(biāo)函數(shù),游標(biāo)函數(shù),MSSQLSEVER的OLEDB提供者、提供者、ODBC驅(qū)動(dòng)器或驅(qū)動(dòng)器或DB_library的動(dòng)態(tài)鏈接庫(kù)(的動(dòng)態(tài)鏈接庫(kù)(DLL)都會(huì)將這些客戶請(qǐng)求傳送給服務(wù)器以對(duì)都會(huì)將這些客戶請(qǐng)求傳送給服務(wù)器以對(duì)API游標(biāo)進(jìn)行處理。游標(biāo)進(jìn)行處理。(3)客戶游標(biāo)客戶游標(biāo)客

9、戶游標(biāo)主要是當(dāng)在客戶機(jī)上緩存結(jié)果集時(shí)才使用。在客戶游標(biāo)中,有一個(gè)缺省的結(jié)果集被用來(lái)在客客戶游標(biāo)主要是當(dāng)在客戶機(jī)上緩存結(jié)果集時(shí)才使用。在客戶游標(biāo)中,有一個(gè)缺省的結(jié)果集被用來(lái)在客戶機(jī)上緩存整個(gè)結(jié)果集??蛻粲螛?biāo)僅支持靜態(tài)游標(biāo)而非動(dòng)態(tài)游標(biāo)。由于服務(wù)器游標(biāo)并不支持所有的戶機(jī)上緩存整個(gè)結(jié)果集??蛻粲螛?biāo)僅支持靜態(tài)游標(biāo)而非動(dòng)態(tài)游標(biāo)。由于服務(wù)器游標(biāo)并不支持所有的TransactSQL語(yǔ)句或批處理,所以客戶游標(biāo)常常僅被用作服務(wù)器游標(biāo)的輔助。因?yàn)樵谝话闱闆r下

10、,服務(wù)語(yǔ)句或批處理,所以客戶游標(biāo)常常僅被用作服務(wù)器游標(biāo)的輔助。因?yàn)樵谝话闱闆r下,服務(wù)器游標(biāo)能支持絕大多數(shù)的游標(biāo)操作。器游標(biāo)能支持絕大多數(shù)的游標(biāo)操作。由于由于API游標(biāo)和游標(biāo)和TransactSQL游標(biāo)使用在服務(wù)器端,所以被稱為服務(wù)器游標(biāo),也被稱為后臺(tái)游標(biāo),游標(biāo)使用在服務(wù)器端,所以被稱為服務(wù)器游標(biāo),也被稱為后臺(tái)游標(biāo),而客戶端游標(biāo)被稱為前臺(tái)游標(biāo)。在本章中我們主要講述服務(wù)器(后臺(tái))游標(biāo)。而客戶端游標(biāo)被稱為前臺(tái)游標(biāo)。在本章中我們主要講述服務(wù)器(

11、后臺(tái))游標(biāo)。每一個(gè)游標(biāo)必須有四個(gè)組成部分這四個(gè)關(guān)鍵部分必須符合下面的順序;每一個(gè)游標(biāo)必須有四個(gè)組成部分這四個(gè)關(guān)鍵部分必須符合下面的順序;1.DECLARE游標(biāo)游標(biāo)2.OPEN游標(biāo)游標(biāo)3.從一個(gè)游標(biāo)中從一個(gè)游標(biāo)中FETCH信息信息4.CLOSE或DEALLOCATE游標(biāo)游標(biāo)通常我們使用通常我們使用DECLARE來(lái)聲明一個(gè)游標(biāo)聲明一個(gè)游標(biāo)主要包括以下主要內(nèi)容:來(lái)聲明一個(gè)游標(biāo)聲明一個(gè)游標(biāo)主要包括以下主要內(nèi)容:游標(biāo)名字游標(biāo)名字?jǐn)?shù)據(jù)來(lái)源(表和列)

12、數(shù)據(jù)來(lái)源(表和列)庫(kù)選項(xiàng),為了與以前的版本兼容,該選項(xiàng)常設(shè)置為庫(kù)選項(xiàng),為了與以前的版本兼容,該選項(xiàng)常設(shè)置為FALSE。FWARD_ONLY選項(xiàng)指明在從游標(biāo)中提取數(shù)據(jù)記錄時(shí),只能按照從第一行到最后一行的順序,此時(shí)只能選用選項(xiàng)指明在從游標(biāo)中提取數(shù)據(jù)記錄時(shí),只能按照從第一行到最后一行的順序,此時(shí)只能選用FETCHNEXT操作。除非使用操作。除非使用STATIC,KEYSET和DYNAMIC關(guān)鍵字,否則如果未指明是使用關(guān)鍵字,否則如果未指明是使

13、用FWARD_ONLY還是使用還是使用SCROLL,那么那么FWARD_ONLY將成為缺省選項(xiàng),因?yàn)槿羰褂脤⒊蔀槿笔∵x項(xiàng),因?yàn)槿羰褂肧TATICKEYSET和DYNAMIC關(guān)鍵字,則變成了關(guān)鍵字,則變成了SCROLL游標(biāo)。另外如果使用了游標(biāo)。另外如果使用了FWARD_ONLY,便不能使用便不能使用FAST_FWARD。STATIC選項(xiàng)的含義與選項(xiàng)的含義與INSENSITIVE選項(xiàng)一樣,選項(xiàng)一樣,MSSQLSERVER會(huì)將游標(biāo)定義所選取出

14、來(lái)的數(shù)據(jù)記錄存放在會(huì)將游標(biāo)定義所選取出來(lái)的數(shù)據(jù)記錄存放在一臨時(shí)表內(nèi)(建立在一臨時(shí)表內(nèi)(建立在tempdb數(shù)據(jù)庫(kù)下)。對(duì)該游標(biāo)的讀取操作皆由臨時(shí)表來(lái)應(yīng)答。因此對(duì)基本表的修數(shù)據(jù)庫(kù)下)。對(duì)該游標(biāo)的讀取操作皆由臨時(shí)表來(lái)應(yīng)答。因此對(duì)基本表的修改并不影響游標(biāo)中的數(shù)據(jù),即游標(biāo)不會(huì)隨著基本表內(nèi)容的改變而改變,同時(shí)也無(wú)法通過游標(biāo)來(lái)更新基本改并不影響游標(biāo)中的數(shù)據(jù),即游標(biāo)不會(huì)隨著基本表內(nèi)容的改變而改變,同時(shí)也無(wú)法通過游標(biāo)來(lái)更新基本表。表。KEYSET指出當(dāng)游

15、標(biāo)被打開時(shí),游標(biāo)中列的順序是固定的,并且指出當(dāng)游標(biāo)被打開時(shí),游標(biāo)中列的順序是固定的,并且MSSQLSERVER會(huì)在會(huì)在tempdb內(nèi)建立一個(gè)表,內(nèi)建立一個(gè)表,該表即為該表即為KEYSET的鍵值可惟一識(shí)別游標(biāo)中的某行數(shù)據(jù)。當(dāng)游標(biāo)擁有者或其它用戶對(duì)基本表中的非鍵值的鍵值可惟一識(shí)別游標(biāo)中的某行數(shù)據(jù)。當(dāng)游標(biāo)擁有者或其它用戶對(duì)基本表中的非鍵值數(shù)據(jù)進(jìn)行修改時(shí),這種變化能夠反映到游標(biāo)中,所以游標(biāo)用戶或所有者可以通過滾動(dòng)游標(biāo)這顯示這些數(shù)數(shù)據(jù)進(jìn)行修改時(shí),

16、這種變化能夠反映到游標(biāo)中,所以游標(biāo)用戶或所有者可以通過滾動(dòng)游標(biāo)這顯示這些數(shù)據(jù)。據(jù)。當(dāng)其它用戶增加一條新的符合所定義的游標(biāo)范圍的數(shù)據(jù)時(shí),無(wú)法由此游標(biāo)讀到該數(shù)據(jù)。因?yàn)楫?dāng)其它用戶增加一條新的符合所定義的游標(biāo)范圍的數(shù)據(jù)時(shí),無(wú)法由此游標(biāo)讀到該數(shù)據(jù)。因?yàn)門ransactSQL服務(wù)器游標(biāo)不支持服務(wù)器游標(biāo)不支持語(yǔ)句。語(yǔ)句。如果在游標(biāo)中的某一行被刪除掉,那么當(dāng)通過游標(biāo)來(lái)提取該刪除行時(shí),如果在游標(biāo)中的某一行被刪除掉,那么當(dāng)通過游標(biāo)來(lái)提取該刪除行時(shí),@@FE

17、TCH_STATUS的返回的返回值為值為2。@@FETCH_STATUS是用來(lái)判斷讀取游標(biāo)是否成功的系統(tǒng)全局變量。是用來(lái)判斷讀取游標(biāo)是否成功的系統(tǒng)全局變量。由于更新操作包括兩部分:刪除原數(shù)據(jù)插入新數(shù)據(jù),所以如果讀取原數(shù)據(jù),由于更新操作包括兩部分:刪除原數(shù)據(jù)插入新數(shù)據(jù),所以如果讀取原數(shù)據(jù),@@FETCH_STATUS的返回值為返回值為2;而且無(wú)法通過游標(biāo)來(lái)讀取新插入的數(shù)據(jù)。但是如果使用了而且無(wú)法通過游標(biāo)來(lái)讀取新插入的數(shù)據(jù)。但是如果使用了W

18、HERECURRENTOF子句時(shí),子句時(shí),該新插入行數(shù)據(jù)便是可見的。該新插入行數(shù)據(jù)便是可見的。注意:如果基礎(chǔ)表未包含惟一的索引或主鍵,則一個(gè)注意:如果基礎(chǔ)表未包含惟一的索引或主鍵,則一個(gè)KEYSET游標(biāo)將回復(fù)成游標(biāo)將回復(fù)成STATIC游標(biāo)。游標(biāo)。DYNAMIC指明基礎(chǔ)表的變化將反映到游標(biāo)中,使用這個(gè)選項(xiàng)會(huì)最大程度上保證數(shù)據(jù)的一致性。然而,與指明基礎(chǔ)表的變化將反映到游標(biāo)中,使用這個(gè)選項(xiàng)會(huì)最大程度上保證數(shù)據(jù)的一致性。然而,與KEYSET和S

19、TATIC類型游標(biāo)相比較,此類型游標(biāo)需要大量的游標(biāo)資源。類型游標(biāo)相比較,此類型游標(biāo)需要大量的游標(biāo)資源。FAST_FWARD指明一個(gè)指明一個(gè)FWARD_ONLYREAD_ONLY型游標(biāo)。此選項(xiàng)已為執(zhí)行進(jìn)行了優(yōu)化。如果型游標(biāo)。此選項(xiàng)已為執(zhí)行進(jìn)行了優(yōu)化。如果SCROLL或F_UPDATE選項(xiàng)被定義,則選項(xiàng)被定義,則FAST_FWARD選項(xiàng)不能被定義。選項(xiàng)不能被定義。SCROLL_LOCKS指明鎖被放置在游標(biāo)結(jié)果集所使用的數(shù)據(jù)上。數(shù)據(jù)被讀入游標(biāo)

20、中時(shí),就會(huì)出現(xiàn)鎖。這個(gè)選項(xiàng)確保對(duì)一個(gè)指明鎖被放置在游標(biāo)結(jié)果集所使用的數(shù)據(jù)上。數(shù)據(jù)被讀入游標(biāo)中時(shí),就會(huì)出現(xiàn)鎖。這個(gè)選項(xiàng)確保對(duì)一個(gè)游標(biāo)進(jìn)行的更新和刪除操作總能被成功執(zhí)行。如果游標(biāo)進(jìn)行的更新和刪除操作總能被成功執(zhí)行。如果FAST_FWARD選項(xiàng)被定義,則不能選擇該選項(xiàng)。選項(xiàng)被定義,則不能選擇該選項(xiàng)。另外,由于數(shù)據(jù)被游標(biāo)鎖定,所以當(dāng)考慮數(shù)據(jù)并發(fā)處理時(shí),應(yīng)避免使用該選項(xiàng)。另外,由于數(shù)據(jù)被游標(biāo)鎖定,所以當(dāng)考慮數(shù)據(jù)并發(fā)處理時(shí),應(yīng)避免使用該選項(xiàng)。OPT

21、IMISTIC指明在數(shù)據(jù)被讀入游標(biāo)后,如果游標(biāo)中某行數(shù)據(jù)已發(fā)生變化,那么對(duì)游標(biāo)數(shù)據(jù)進(jìn)行更新或刪除可能會(huì)導(dǎo)指明在數(shù)據(jù)被讀入游標(biāo)后,如果游標(biāo)中某行數(shù)據(jù)已發(fā)生變化,那么對(duì)游標(biāo)數(shù)據(jù)進(jìn)行更新或刪除可能會(huì)導(dǎo)致失敗。如果使用了致失敗。如果使用了FAST_FWARD選項(xiàng),則不能使用該選項(xiàng)。選項(xiàng),則不能使用該選項(xiàng)。TYPE_WARNING指明若游標(biāo)類型被修改成與用戶定義的類型不同時(shí),將發(fā)送一個(gè)警告信息給客戶端。指明若游標(biāo)類型被修改成與用戶定義的類型不同時(shí)

22、,將發(fā)送一個(gè)警告信息給客戶端。注意:不可以將注意:不可以將SQL_92的游標(biāo)語(yǔ)法規(guī)則與的游標(biāo)語(yǔ)法規(guī)則與MSSQLSERVER的游標(biāo)擴(kuò)展用法混合在一起使用。的游標(biāo)擴(kuò)展用法混合在一起使用。下面我們將總結(jié)一下聲明游標(biāo)時(shí)應(yīng)注意的一些問題。下面我們將總結(jié)一下聲明游標(biāo)時(shí)應(yīng)注意的一些問題。如果在如果在CURS前使用了前使用了SCROLL或INSENSITIVE保留字,則不能在保留字,則不能在CURS和F_statement之間使用任何的保留字。反之同

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論