




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第8章存儲過程的操作與管理
存儲過程概述存儲過程是為完成特定的功能而聚集在一起的一組SQL程序語句,經(jīng)編譯后存儲在數(shù)據(jù)庫中的SQL程序。在SQLServer中使用存儲過程而不使用存儲在客戶端計算機(jī)本地的Transact-SQL程序的優(yōu)點包括:〔1〕存儲過程已在效勞器注冊。〔2〕存儲過程具有平安特性〔例如權(quán)限〕和所有權(quán)鏈接,以及可以附加到它們的證書。〔3〕存儲過程可以強(qiáng)制應(yīng)用程序的平安性。〔4〕存儲過程允許模塊化程序設(shè)計。〔5〕存儲過程是命名代碼,允許延遲綁定。〔6〕存儲過程可以減少網(wǎng)絡(luò)通信流量。8.1創(chuàng)立存儲過程在SQLServer中,可以使用兩種方法創(chuàng)立存儲過程:〔1〕使用創(chuàng)立存儲過程模板創(chuàng)立存儲過程;〔2〕利用SQLServer管理平臺創(chuàng)立存儲過程。
當(dāng)創(chuàng)立存儲過程時,需要確定存儲過程的三個組成局部:〔1〕所有的輸入?yún)?shù)以及傳給調(diào)用者的輸出參數(shù)。〔2〕被執(zhí)行的針對數(shù)據(jù)庫的操作語句,包括調(diào)用其他存儲過程的語句。〔3〕返回給調(diào)用者的狀態(tài)值,以指明調(diào)用是成功還是失敗。
8.1創(chuàng)立存儲過程CREATEPROCEDURE的語法形式如下:
CREATE{PROC|PROCEDURE}[schema_name.]procedure_name[;number]
[{@parameter[type_schema_name.]data_type}
[VARYING][=default][[OUT[PUT]][,...n][WITH<procedure_option>[,...n][FORREPLICATION]AS{<sql_statement>[;][...n]|<method_specifier>}[;]<procedure_option>::=[ENCRYPTION][RECOMPILE]
EXECUTE_AS_Clause]<sql_statement>::={[BEGIN]statements[END]}<method_specifier>::=EXTERNALNAME8.1.1使用模板創(chuàng)立存儲過程〔1〕在SQLServer管理平臺中,選擇“視圖〔View〕〞菜單中的“模板資源資源管理器(TemplateExplorer)〞,出現(xiàn)“模板資源管理器(TemplateExplorer)〞窗口,選擇“存儲過程〞中的“創(chuàng)立存儲過程〞選項,如圖8-1所示。〔2〕在文本框中可以輸入創(chuàng)立存儲過程的Transact_SQL語句,單擊“執(zhí)行〞按鈕,即可創(chuàng)立該存儲過程。圖8-1創(chuàng)立存儲過程模板使用管理平臺創(chuàng)立存儲過程〔1〕在SQLServer管理平臺中,展開指定的效勞器和數(shù)據(jù)庫,然后展開程序,右擊存儲過程選項,在彈出的快捷菜單中依次選擇“新建→存儲過程…〞選項,如圖8-2所示,出現(xiàn)創(chuàng)立存儲過程窗口。〔2〕在文本框中可以輸入創(chuàng)立存儲過程的Transact_SQL語句,單擊“執(zhí)行〞按鈕,即可創(chuàng)立該存儲過程。圖8-2新建存儲過程使用管理平臺創(chuàng)立存儲過程例8-1創(chuàng)立一個帶有SELECT語句的簡單過程,該存儲過程返回所有員工姓名,Email地址,等。該存儲過程不使用任何參數(shù)程序清單如下。USEadventureworksGOCREATEPROCEDUREau_infor_allASSELECTlastname,firstname,emailaddress,phoneFROMperson.contactGO使用管理平臺創(chuàng)立存儲過程例8-2創(chuàng)立一個存儲過程,以簡化對sc表的數(shù)據(jù)添加工作,使得在執(zhí)行該存儲過程時,其參數(shù)值作為數(shù)據(jù)添加到表中。程序清單如下:CREATEPROCEDURE[dbo].[pr1_sc_ins]@Param1char(10),@Param2char(2),@Param3realASBEGIN insertintosc(sno,cno,score)values(@Param1,@Param2,@Param3)END使用管理平臺創(chuàng)立存儲過程例8-3創(chuàng)立一個帶有參數(shù)的簡單存儲過程,從視圖中返回指定的雇員〔提供名和姓〕及其職務(wù)和部門名稱,該存儲過程接受與傳遞的參數(shù)精確匹配的值程序清單如下。USEAdventureWorks;GOCREATEPROCEDUREGetEmployees@lastnamevarchar(40),@firstnamevarchar(20)ASSELECTLastName,FirstName,JobTitle,DepartmentFROMHumanResources.vEmployeeDepartmentWHEREFirstName=@firstnameANDLastName=@lastname;GO使用管理平臺創(chuàng)立存儲過程例8-4下面的存儲過程從表person.contact中返回指定的一些員工姓名及其。該存儲過程對傳遞的參數(shù)進(jìn)行模式匹配。如果沒有提供參數(shù),那么使用預(yù)設(shè)的默認(rèn)值〔姓氏以字母D開頭〕程序清單如下。USEAdventureWorks;GOCREATEPROCEDUREau_infor2@lastnamevarchar(40)='D%',@firstnamevarchar(20)='%'ASSELECTfirstname,lastname,phoneFROMperson.contactWHEREfirstnameLIKE@firstnameANDlastnameLIKE@lastnameGO使用管理平臺創(chuàng)立存儲過程例8-5以下例如顯示有一個輸入?yún)?shù)和一個輸出參數(shù)的存儲過程。存儲過程中的第一個參數(shù)@sname將接收由調(diào)用程序指定的輸入值(學(xué)生姓名),第二個參數(shù)@sscore〔成績〕將用于將該值返回調(diào)用程序。SELECT語句使用@sname參數(shù)獲取正確的@sscore值,并將該值分配給輸出參數(shù)。程序清單如下:CREATEPROCEDUREs_score@snamechar(8),@sscorerealoutputASSELECT@sscore=scorefromscjoinsons.sno=sc.snowheresn=@snameGO8.1.3執(zhí)行存儲過程
可以使用Transact-SQLEXECUTE語句來運(yùn)行存儲過程。存儲過程與函數(shù)不同,因為存儲過程不返回取代其名稱的值,也不能直接在表達(dá)式中使用。執(zhí)行存儲過程必須具有執(zhí)行存儲過程的權(quán)限許可,才可以直接執(zhí)行存儲過程,直接執(zhí)行存儲過程可以使用EXECUTE命令來執(zhí)行,語法形式如下:[[EXEC[UTE]]
{
[@return_status=]
{procedure_name[;number]|@procedure_name_var}
[[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]}
[,...n]
[WITHRECOMPILE]8.1.3執(zhí)行存儲過程
例8-6執(zhí)行存儲過程au_infor_all。au_infor_all存儲過程可以通過以下方法執(zhí)行:EXECUTE〔EXEC〕au_infor_all例8-7使用EXECUTE命令傳遞參數(shù),執(zhí)行例8-2定義的存儲過程pr1_sc_ins。sc_ins存儲過程可以通過以下方法執(zhí)行:EXECpr1_sc_ins‘3130040101’,’c1’,85當(dāng)然,在執(zhí)行過程中變量可以顯式命名:EXECsc_ins@Param1=’3130040101’,@Param2=’c1’,@Param3=85例8-8執(zhí)行例8-3定義的存儲過程GetEmployees。GetEmployees存儲過程可以通過以下方法執(zhí)行:EXECUTE〔EXEC〕GetEmployees'Dull','Ann'或者EXECUTE〔EXEC〕GetEmployees@lastname='Dull',@firstname='Ann'或者EXECUTE〔EXEC〕GetEmployees@firstname='Ann',@lastname='Dull'8.2查看、修改和刪除存儲過程
8.2.1查看存儲過程8.2.2修改存儲過程8.2.3重命名和刪除存儲過程8.2.1查看存儲過程〔1〕使用SQLServer管理平臺查看用戶創(chuàng)立的存儲過程。在SQLServer管理平臺中,展開指定的效勞器和數(shù)據(jù)庫,選擇并依次展開“程序→存儲過程〞,然后右擊要查看的存儲過程名稱,如圖8-3所示,從彈出的快捷菜單中,選擇“創(chuàng)立存儲過程腳本為→CREATE到→新查詢編輯器窗口〞,那么可以看到存儲過程的源代碼。圖8-3查看存儲過程
8.2.1查看存儲過程
〔2〕使用系統(tǒng)存儲過程來查看用戶創(chuàng)立的存儲過程。可供使用的系統(tǒng)存儲過程及其語法形式如下:sp_help,用于顯示存儲過程的參數(shù)及其數(shù)據(jù)類型,其語法為:sp_help[[@objname=]name],參數(shù)name為要查看的存儲過程的名稱。sp_helptext,用于顯示存儲過程的源代碼,其語法為:sp_helptext[[@objname=]name],參數(shù)name為要查看的存儲過程的名稱。sp_depends,用于顯示和存儲過程相關(guān)的數(shù)據(jù)庫對象,其語法為:sp_depends[@objname=]’object’,參數(shù)object為要查看依賴關(guān)系的存儲過程的名稱。sp_stored_procedures,用于返回當(dāng)前數(shù)據(jù)庫中的存儲過程列表,其語法為:sp_stored_procedures[[@sp_name=]'name']
[,[@sp_owner=]'owner']
[,[@sp_qualifier=]'qualifier']其中,[@sp_name=]'name'用于指定返回目錄信息的過程名;[@sp_owner=]'owner'用于指定過程所有者的名稱;[@qualifier=]'qualifier'用于指定過程限定符的名稱。8.2.2修改存儲過程
存儲過程可以根據(jù)用戶的要求或者基表定義的改變而改變。使用ALTERPROCEDURE語句可以更改先前通過執(zhí)行CREATEPROCEDURE語句創(chuàng)立的過程,但不會更改權(quán)限,也不影響相關(guān)的存儲過程或觸發(fā)器。修改存儲過程語法形式如下:ALTERPROC[EDURE]procedure_name[;number][{@parameterdata_type}[VARYING][=default][OUTPUT]][,...n]
[WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FORREPLICATION]AS
sql_statement[...n]8.2.2修改存儲過程
例8-9創(chuàng)立了一個名為proc_person的存儲過程,該存儲過程包含姓名和Email地址信息。然后,用ALTERPROCEDURE重新定義了該存儲過程,使之只包含姓名信息,并使用ENCRYPTION關(guān)鍵字使之無法通過查看syscomments表來查看存儲過程的內(nèi)容。程序清單如下。USEadventureworksGO/*創(chuàng)立一個存儲過程,該存儲過程包含姓名和Email地址信息*/CREATEPROCEDUREproc_personASSELECTfirstname,lastname,emailaddressFROMperson.contactORDERBYlastname,firstnameGO8.2.2修改存儲過程
下面對該存儲過程進(jìn)行重新定義。使之只包含姓名信息,并使用ENCRYPTION關(guān)鍵字使之無法通過查看syscomments表來查看存儲過程的內(nèi)容。程序清單如下:ALTERPROCED
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年網(wǎng)絡(luò)管理員考試的復(fù)習(xí)大綱探討試題及答案
- 主管工作總結(jié)的結(jié)果評估計劃
- 法學(xué)概論中常見法律術(shù)語解讀試題及答案
- 財務(wù)課程學(xué)習(xí)的重要性計劃
- 自信面對2025年法學(xué)概論考試試題及答案
- 2024年南昌航空大學(xué)輔導(dǎo)員考試真題
- 2024年烏什縣人民醫(yī)院招聘筆試真題
- 法學(xué)教育的現(xiàn)狀與未來試題及答案
- 2024年湖北省生態(tài)環(huán)境廳下屬事業(yè)單位真題
- 法學(xué)概論法律教育政策的研究進(jìn)展試題及答案
- 2022年全國外貿(mào)跟單員崗位專業(yè)考試外貿(mào)跟單基礎(chǔ)理論試卷A卷(含英語)
- AI時代的挑戰(zhàn)與機(jī)遇2024年人工智能的應(yīng)用與發(fā)展
- 人教版六年級上冊數(shù)學(xué)第五、六單元測試題(含答案)
- 陜西省西安市蓮湖區(qū)2023-2024學(xué)年六年級下學(xué)期期末英語試題
- 高中化學(xué)優(yōu)質(zhì)課說課 海水資源的開發(fā)利用
- 企業(yè)錄用通知書offer模板
- 人際溝通與禮儀智慧樹知到課后章節(jié)答案2023年下河北工業(yè)職業(yè)技術(shù)學(xué)院
- 責(zé)任書-景區(qū)安全生產(chǎn)責(zé)任書
- QB∕T 3826-1999 輕工產(chǎn)品金屬鍍層和化學(xué)處理層的耐腐蝕試驗方法 中性鹽霧試驗(NSS)法
- 田徑運(yùn)動會競賽團(tuán)體總分記錄表
- 藥物臨床試驗質(zhì)量管理規(guī)范(GCP)課件
評論
0/150
提交評論