資源描述:
《存儲(chǔ)過(guò)程(SQLServer)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、存儲(chǔ)過(guò)程楊之江yangzhijiang@mapgis.net內(nèi)容存儲(chǔ)過(guò)程概念創(chuàng)建和執(zhí)行存儲(chǔ)過(guò)程從存儲(chǔ)過(guò)程中返回?cái)?shù)據(jù)查看、修改、刪除存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的加密存儲(chǔ)過(guò)程的調(diào)試重新編譯存儲(chǔ)過(guò)程C#中調(diào)用存儲(chǔ)過(guò)程Q&AT-SQL來(lái)進(jìn)行編程的兩種方法在利用數(shù)據(jù)庫(kù)管理系統(tǒng)創(chuàng)建應(yīng)用程序時(shí),SQL語(yǔ)言是應(yīng)用程序和數(shù)據(jù)庫(kù)管理系統(tǒng)之間的主要編程接口。使用SQL語(yǔ)言編寫(xiě)代碼時(shí),可以用兩種方法存儲(chǔ)和執(zhí)行代碼。一種是在客戶端存儲(chǔ)代碼,并創(chuàng)建向數(shù)據(jù)庫(kù)管理系統(tǒng)發(fā)送SQL語(yǔ)句并處理返回結(jié)果的應(yīng)用程序;第二種是將這些SQL語(yǔ)句存儲(chǔ)在數(shù)據(jù)庫(kù)管理系統(tǒng)中,這些存儲(chǔ)在數(shù)據(jù)庫(kù)管理系統(tǒng)中的SQL語(yǔ)句就是存儲(chǔ)過(guò)程,然后再創(chuàng)建執(zhí)行存儲(chǔ)過(guò)程并處理返
2、回結(jié)果的應(yīng)用程序。1存儲(chǔ)過(guò)程概念存儲(chǔ)過(guò)程是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它系統(tǒng)存儲(chǔ)過(guò)程系統(tǒng)過(guò)程主要存儲(chǔ)在master數(shù)據(jù)庫(kù)中并以sp_為前綴,并且系統(tǒng)存儲(chǔ)過(guò)程主要是從系統(tǒng)表中獲取信息,從而為系統(tǒng)管理員管理SQLServer提供支持。用戶自定義存儲(chǔ)過(guò)程用戶自定義存儲(chǔ)過(guò)程是由用戶創(chuàng)建并能完成某一特定功能如查詢用戶所需數(shù)據(jù)信息的存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程可以接受輸入?yún)?shù)并以輸出參數(shù)的形式將多個(gè)值返回給調(diào)用過(guò)程。包含執(zhí)行數(shù)據(jù)庫(kù)操作(包括調(diào)用其它存儲(chǔ)過(guò)程)的編程語(yǔ)句。向調(diào)用過(guò)程返回狀態(tài)值,以表明執(zhí)行成功或失?。ㄒ约笆?/p>
3、敗原因)使用存儲(chǔ)過(guò)程的好處允許模塊化程序設(shè)計(jì)標(biāo)準(zhǔn)的編寫(xiě)規(guī)范多次調(diào)用而不必重新編寫(xiě)該存儲(chǔ)過(guò)程的SQL語(yǔ)句對(duì)存儲(chǔ)過(guò)程進(jìn)行修改但對(duì)應(yīng)用程序源代碼毫無(wú)影響提高了程序的可移植性改善性能,執(zhí)行速度快存儲(chǔ)過(guò)程是預(yù)編譯的,而批處理的SQL語(yǔ)句在每次運(yùn)行時(shí)都要進(jìn)行編譯和優(yōu)化因此速度相對(duì)要慢一些減少網(wǎng)絡(luò)流量客戶計(jì)算機(jī)上調(diào)用該存儲(chǔ)過(guò)程時(shí)網(wǎng)絡(luò)中傳送的只是該調(diào)用語(yǔ)句,否則將是多條SQL語(yǔ)句從而大大增加了網(wǎng)絡(luò)流量,降低網(wǎng)絡(luò)負(fù)載可作為安全機(jī)制使用系統(tǒng)管理員通過(guò)對(duì)執(zhí)行某一存儲(chǔ)過(guò)程的權(quán)限進(jìn)行限制從而能夠?qū)崿F(xiàn)對(duì)相應(yīng)的數(shù)據(jù)訪問(wèn)權(quán)限的限制避免非授權(quán)用戶對(duì)數(shù)據(jù)的訪問(wèn)保證數(shù)據(jù)的安全2創(chuàng)建和執(zhí)行存儲(chǔ)過(guò)程創(chuàng)建存儲(chǔ)過(guò)程CREATE{PROC
4、
5、PROCEDURE}[schema_name.]procedure_name[{@parameter[type_schema_name.]data_type}[VARYING][=default][OUTPUT]][,...n][WITH[,...n]][FORREPLICATION]AS{[;][...n]}[;]::=[ENCRYPTION][RECOMPILE]2創(chuàng)建和執(zhí)行存儲(chǔ)過(guò)程執(zhí)行存儲(chǔ)過(guò)程[EXEC[UTE]]存儲(chǔ)過(guò)程名[實(shí)參[,…n]]注意事項(xiàng)不能將CREATEPROCEDURE語(yǔ)
6、句與其它SQL語(yǔ)句組合到一個(gè)批處理中。創(chuàng)建存儲(chǔ)過(guò)程的權(quán)限默認(rèn)屬于數(shù)據(jù)庫(kù)所有者,該所有者可將此權(quán)限授予其他用戶。存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)對(duì)象,其名稱必須遵守?cái)?shù)據(jù)庫(kù)對(duì)象命名規(guī)則。只能在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建存儲(chǔ)過(guò)程。例1.帶有復(fù)雜SELECT語(yǔ)句的存儲(chǔ)過(guò)程:對(duì)pubs數(shù)據(jù)庫(kù),查詢居住在“Oakland”城市(authors表中的city列)的作者的姓名(au_lname列和au_fname列的值的組合)、所寫(xiě)的圖書(shū)的書(shū)名(titles表中的title列)、圖書(shū)出版日期(titles表中的pubdate列)以及出版商名(publishers表中的pub_name列)。CREATEPROCEDUREp_city1A
7、SSELECTau_lname+''+au_fnameAS作者名,titleas書(shū)名,pubdateas出版日期,pub_nameas出版商FROMauthorsjointitleauthorONauthors.au_id=titleauthor.au_idJOINtitlesONtitles.title_id=titleauthor.title_idJOINpublishersONpublishers.pub_id=titles.pub_idWHEREauthors.city='Oakland'調(diào)用:EXECp_city1例2.帶有輸入?yún)?shù)的存儲(chǔ)過(guò)程:查詢居住在指定城市的作者的姓名、所寫(xiě)的圖
8、書(shū)的書(shū)名、圖書(shū)出版日期和出版商名CREATEPROCEDUREp_city2@cityasvarchar(20)ASSELECTau_lname+''+au_fnameAS作者名,titleas書(shū)名,pubdateas出版日期,pub_nameas出版商FROMauthorsjointitleauthorONauthors.au_id=titleauthor.au_idJOINtitlesONti