數(shù)據(jù)庫(kù)中的游標(biāo)、存儲(chǔ)過(guò)程和觸發(fā)器_第1頁(yè)
數(shù)據(jù)庫(kù)中的游標(biāo)、存儲(chǔ)過(guò)程和觸發(fā)器_第2頁(yè)
數(shù)據(jù)庫(kù)中的游標(biāo)、存儲(chǔ)過(guò)程和觸發(fā)器_第3頁(yè)
數(shù)據(jù)庫(kù)中的游標(biāo)、存儲(chǔ)過(guò)程和觸發(fā)器_第4頁(yè)
數(shù)據(jù)庫(kù)中的游標(biāo)、存儲(chǔ)過(guò)程和觸發(fā)器_第5頁(yè)
已閱讀5頁(yè),還剩2頁(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、數(shù)據(jù)庫(kù)中的游標(biāo)、存儲(chǔ)過(guò)程和觸發(fā)器原文:SQL-SERVER是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),能夠與WINDOWS平臺(tái)緊密集成,以一種簡(jiǎn)單的方式來(lái)完成各種復(fù)雜的任務(wù)。SQL-SERVER管理大量數(shù)據(jù),允許大量用戶進(jìn)行并發(fā)訪問(wèn),維護(hù)數(shù)據(jù)的完整性和安全性。本文正是從游標(biāo)、存儲(chǔ)過(guò)程、觸發(fā)器三個(gè)方面論述SQL-SERVER高效處理數(shù)據(jù)的方法。1 SQL-SERVER數(shù)據(jù)庫(kù)簡(jiǎn)介SQL-SERVER是一個(gè)功能完備而強(qiáng)大的數(shù)據(jù)庫(kù)管理系統(tǒng)。在SQL-SERVER中,數(shù)據(jù)和程序被劃分為不同的邏輯組件,稱為數(shù)據(jù)庫(kù)對(duì)象,通過(guò)訪問(wèn)和管理數(shù)據(jù)庫(kù)對(duì)象來(lái)訪問(wèn)和管理SQL-SERVER中的信息。表是SQL-SERVER中的最重要的數(shù)

2、據(jù)庫(kù)對(duì)象。數(shù)據(jù)庫(kù)被存儲(chǔ)在一個(gè)或者多個(gè)數(shù)據(jù)庫(kù)文件中。關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)是讓用戶用語(yǔ)句來(lái)獲得和修改與實(shí)體相關(guān)的信息。所有的主流數(shù)據(jù)庫(kù)都支持用標(biāo)準(zhǔn)的SQL語(yǔ)言來(lái)作業(yè)。2 SQL-SERVER數(shù)據(jù)庫(kù)中的游標(biāo)、存儲(chǔ)過(guò)程、觸發(fā)器2.1 游標(biāo)的作用、功能及其優(yōu)點(diǎn)SQL-SERVER中的“游標(biāo)”是一種數(shù)據(jù)庫(kù)對(duì)象,應(yīng)用程序用它來(lái)對(duì)結(jié)果集實(shí)行“行集”操作。SQL-SERVER支持CLIENT游標(biāo)、API SERVER游標(biāo)和T-SQL游標(biāo)。T-SQL游標(biāo)和其它種類的游標(biāo)區(qū)別是:T-SQL游標(biāo)在存儲(chǔ)過(guò)程、批處理、函數(shù)、或觸發(fā)器中使用,用于重復(fù)對(duì)光標(biāo)每一行的定制的處理。其它種類的游標(biāo)被設(shè)計(jì)用于從客戶應(yīng)用程序中訪問(wèn)數(shù)據(jù)庫(kù)信息

3、。本文以T-SQL游標(biāo)為例。下面,聲明一個(gè)FORWARD_ONLY游標(biāo),該游標(biāo)允許對(duì)其數(shù)據(jù)進(jìn)行修改。在查詢分析器中執(zhí)行下列語(yǔ)句:DECLARE JobsCursor CURSOR FORWARD_ONLY FORSELECT * FROM jobs WHERE min_lvl=75 FOR UPDATEOPEN JobsCursorFET CH JobsCursorUPDATE jobsSET max_lvl=100 WHERE CURRENT OF JobsCursorSELECT * FROM jobs WHERE min_lvl=75CLOSE JobsCursorDEALLOCATE

4、JobsCursor游標(biāo)的優(yōu)點(diǎn):游標(biāo)的這種行集設(shè)計(jì)方法是處理數(shù)據(jù)的一個(gè)強(qiáng)有力的工具。2.2 存儲(chǔ)過(guò)程的作用、功能及其優(yōu)點(diǎn)SQL-SERVER中的“存儲(chǔ)過(guò)程”是一組預(yù)編譯的SQL語(yǔ)句。T-SQL語(yǔ)句是充當(dāng)SQL-SERVER數(shù)據(jù)庫(kù)和用戶應(yīng)用程序間的編程接口。存儲(chǔ)和執(zhí)行T-SQL程序的方法有兩種,一種是本地存儲(chǔ)程序,另一種是將程序存儲(chǔ)為SQL-SERVER中的“存儲(chǔ)過(guò)程”,然后創(chuàng)建應(yīng)用程序執(zhí)行存儲(chǔ)過(guò)程。通過(guò)編寫存儲(chǔ)過(guò)程來(lái)運(yùn)行經(jīng)常執(zhí)行的管理任務(wù),或者應(yīng)用復(fù)雜的業(yè)務(wù)規(guī)則。SQL-SERVER中的存儲(chǔ)過(guò)程分為“系統(tǒng)存儲(chǔ)過(guò)程”和“用戶定義的存儲(chǔ)過(guò)程”。系統(tǒng)存儲(chǔ)過(guò)程用以管理SQL-SERVER和顯示有關(guān)數(shù)據(jù)

5、庫(kù)和用戶的信息,系統(tǒng)存儲(chǔ)過(guò)程充當(dāng)從系統(tǒng)表中檢索信息的快捷方式,如:sp-stored-procedures列出當(dāng)前環(huán)境中的所有存儲(chǔ)過(guò)程。SQL-SERVER存儲(chǔ)過(guò)程具有以下幾點(diǎn)功能:a. 通過(guò)輸入,輸出參數(shù)與調(diào)用程序通訊;b. 返回一個(gè)稱為返回代碼的整型值,以表明過(guò)程的執(zhí)行狀態(tài);c. 具有方便的重新編譯其過(guò)程的方法,用EXECUTE與WITH RECOMPILE 子句;下面,聲明一個(gè)簡(jiǎn)單的存儲(chǔ)過(guò)程。在查詢分析器中執(zhí)行下列語(yǔ)句:create procedure ssintvalue1 int,intvalue2 int,inttotal int outputas select inttotal=

6、intvalue1+intvalue2godeclare inttotal intexec ss 15,9, inttotal outputprint the total of 15 and 9 is+convert(char(8, inttotal執(zhí)行結(jié)果為:the total of 15 and 9 is 25存儲(chǔ)過(guò)程具有以下優(yōu)點(diǎn):a. 允許模塊化程序設(shè)計(jì)。b. 只需創(chuàng)建過(guò)程一次并將其存儲(chǔ)在數(shù)據(jù)庫(kù)中,以后即可在程序中調(diào)用該過(guò)程任意次。存儲(chǔ)過(guò)程可獨(dú)立于程序源代碼而單獨(dú)修改。c. 運(yùn)行速度快。存儲(chǔ)過(guò)程將比T-SQL批代碼的執(zhí)行要快。存儲(chǔ)過(guò)程是被編譯后存放在數(shù)據(jù)庫(kù)服務(wù)器的過(guò)程高速緩存中,當(dāng)使用時(shí)

7、,服務(wù)器不必再重新分析和編譯它們。d. 減少網(wǎng)絡(luò)流量。在網(wǎng)絡(luò)中要發(fā)送的數(shù)百行代碼,可由一條執(zhí)行其過(guò)程代碼的一條單獨(dú)語(yǔ)句就可實(shí)現(xiàn)。e. 有安全機(jī)制??墒谟铔](méi)有直接執(zhí)行存儲(chǔ)過(guò)程中語(yǔ)句的權(quán)限的用戶,也可執(zhí)行該存儲(chǔ)過(guò)程的權(quán)限。另外可以防止用戶直接訪問(wèn)表,強(qiáng)制用戶使用存儲(chǔ)過(guò)程執(zhí)行特定的任務(wù)。2.3 觸發(fā)器的作用、功能及其優(yōu)點(diǎn)SQL-SERVER中的“觸發(fā)器”是一種強(qiáng)制業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性的一種類型機(jī)制,它是一種特殊類型的存儲(chǔ)過(guò)程。SQL-SERVER有兩種類型的觸發(fā)器:“AFTER 觸發(fā)器”和“INSTEAD OF觸發(fā)器”。觸發(fā)器具有以下幾點(diǎn)功能:a. 以“偵測(cè)”數(shù)據(jù)庫(kù)內(nèi)的操作,確保輸入表中的數(shù)據(jù)的有效

8、性;b. 實(shí)現(xiàn)“層疊刪除”,如在表INVENTORY和INVENTORY PROPERTY之間不存在外鍵,但用一個(gè)觸發(fā)器可以監(jiān)視INVENTORY表中記錄的刪除情況,及另一個(gè)表與之有關(guān)聯(lián)的記錄;c. 訪問(wèn)“INSERTED表”和”DELETED表中的內(nèi)容。如對(duì)更新類型觸發(fā)器的表來(lái)講,將在“刪除表”中存放舊值,而在“插入表”中存放新值。刪除表和插入表是每個(gè)觸發(fā)器都有的兩個(gè)特殊的虛擬表,這兩個(gè)表是邏輯表,并動(dòng)態(tài)存貯在內(nèi)存中;下面,將創(chuàng)建一個(gè)UPDATE觸發(fā)器,以確保PRODUCTS表中現(xiàn)有的UnitsOnOrder和ReorderLevel列不會(huì)被修改為小于10的值。每次執(zhí)行此操作時(shí),都執(zhí)行該觸發(fā)

9、器。以下是在查詢分析器中實(shí)現(xiàn)的T-SQL塊:CREATE TRIGGER CheckProductUpdateON Products For UPDATE ASIF(SELECT UnitsOnOrder FROM INSERTED<10OR(SELECT ReorderLevel FROM INSERTED<10BEGINPRINT 錯(cuò)誤,不能小于10!ROLLBACK TRANSACTIONEND執(zhí)行下面的語(yǔ)句:UPDATE Products SET UnitsOnOrder=5 WHERE ProductID=5執(zhí)行結(jié)果為:錯(cuò)誤,不能小于10!保證了UnitsOnOrder和

10、ReorderLevel列不會(huì)被修改為小于10的值。d. “INSEAD OF觸發(fā)器”提供了基于聯(lián)接條件的視圖所“不支持”的數(shù)據(jù)刪除操作。INSTEAD OF觸發(fā)器可以基于一個(gè)數(shù)據(jù)修改操作。這是SQL-SERVER觸發(fā)器的另一個(gè)重要功能之一;下面創(chuàng)建一個(gè)基于employee表和publisher表的視圖,要使對(duì)此視圖進(jìn)行更新,必須通過(guò)INSTEAD OF觸發(fā)器來(lái)刪除數(shù)據(jù)。以下是在查詢分析器中的T-SQL塊:CREATE VIEW Emp_pub AsSELECT emp_id,lname,job_id,pub_nameFROM employee e,publishers p WHERE e.p

11、ub_id=p.pub_idCREATE TRIGGER del_emp ON Emp_pubINSERTED OF DELETE ASDELETE employee WHERE emp_id IN (SELECT emp_id FROM DELETED執(zhí)行下面的語(yǔ)句,刪除數(shù)據(jù)。DELETE Emp_pub WHERE emp_id=POK93028Me. 觸發(fā)器與存儲(chǔ)過(guò)程類似,亦可進(jìn)行加密處理。以保證代碼的安全。觸發(fā)器的優(yōu)缺點(diǎn):觸發(fā)器常用于強(qiáng)制業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性的強(qiáng)大工具。據(jù)資料分析,提倡簡(jiǎn)化使用觸發(fā)器,沒(méi)有必要使代碼太復(fù)雜而讓人費(fèi)解。也不要太多使用觸發(fā)器,因?yàn)橛|發(fā)器的執(zhí)行,高度和管理很復(fù)

12、雜。3 游標(biāo)、存儲(chǔ)過(guò)程、觸發(fā)器三者的聯(lián)系SQL-SERVER數(shù)據(jù)庫(kù)中的游標(biāo)、存儲(chǔ)過(guò)程、觸發(fā)器三者從不同方面提高了數(shù)據(jù)處理能力。參見下面的圖1.觸發(fā)器是一種特殊類型的存儲(chǔ)過(guò)程,它主要是通過(guò)事件進(jìn)行觸發(fā)而被執(zhí)行的,而存儲(chǔ)過(guò)程是通過(guò)存儲(chǔ)過(guò)程的名字而被直接調(diào)用;游標(biāo)可提供腳本,存儲(chǔ)過(guò)程和觸發(fā)器中使用的訪問(wèn)結(jié)果集中的數(shù)據(jù)的T-SQL語(yǔ)句。圖1 高效處理數(shù)據(jù)圖4 結(jié)論SQL-SERVER是一個(gè)關(guān)系數(shù)據(jù)庫(kù),用于各種企業(yè)組織及專業(yè)數(shù)據(jù)庫(kù)和應(yīng)用開發(fā)環(huán)境中。能迅速地設(shè)計(jì)和開發(fā)客戶/服務(wù)器。游標(biāo)的行集操作設(shè)計(jì)方法是一個(gè)強(qiáng)有力的工具,要合理使用游標(biāo)。游標(biāo)主要用于實(shí)現(xiàn)一些不能使用面向集合的語(yǔ)句實(shí)現(xiàn)的操作。T-SQL的存儲(chǔ)過(guò)程的功能強(qiáng)大,甚至可以實(shí)現(xiàn)最復(fù)雜的商業(yè)事務(wù),存儲(chǔ)過(guò)程結(jié)合了過(guò)程和非過(guò)程兩種方法。具有通訊、模塊設(shè)計(jì)、執(zhí)行快等優(yōu)點(diǎn)?!坝|發(fā)器”是

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論