




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、存儲過程與觸發(fā)器補充內(nèi)容存儲過程與觸發(fā)器概述在大型數(shù)據(jù)庫系統(tǒng)中,存儲過程和觸發(fā)器具有很重要的作用。無論是存儲過程還是觸發(fā)器,都是SQL 語句和流程控制語句的集合。就本質(zhì)而言,觸發(fā)器也是一種存儲過程。存儲過程在運算時生成執(zhí)行方式,所以,以后對其再運行時其執(zhí)行速度很快。SQL Server 2000 不僅提供了用戶自定義存儲過程的功能,而且也提供了許多可作為工具使用的系統(tǒng)存儲過程。1.1 存儲過程的概念存儲過程(Stored Procedure)是一組為了完成特定功能的SQL 語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中。用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。1.1 存儲過程的
2、概念在SQL Server 的系列版本中存儲過程分為兩類:系統(tǒng)提供的存儲過程和用戶自定義存儲過程。系統(tǒng)過程主要存儲在master數(shù)據(jù)庫中并以sp_為前綴,并且系統(tǒng)存儲過程主要是從系統(tǒng)表中獲取信息,從而為系統(tǒng)管理員管理SQL Server 提供支持。通過系統(tǒng)存儲過程,MS SQL Server 中的許多管理性或信息性的活動(如了解數(shù)據(jù)庫對象、數(shù)據(jù)庫信息)都可以被順利有效地完成。盡管這些系統(tǒng)存儲過程被放在master數(shù)據(jù)庫中,但是仍可以在其它數(shù)據(jù)庫中對其進行調(diào)用,在調(diào)用時不必在存儲過程名前加上數(shù)據(jù)庫名。而且當(dāng)創(chuàng)建一個新數(shù)據(jù)庫時,一些系統(tǒng)存儲過程會在新數(shù)據(jù)庫中被自動創(chuàng)建。用戶自定義存儲過程是由用戶創(chuàng)
3、建并能完成某一特定功能(如查詢用戶所需數(shù)據(jù)信息)的存儲過程。在本次課中所涉及到的存儲過程主要是指用戶自定義存儲過程。舉例:sp_columns;sp_datatype_info1.2 存儲過程的優(yōu)點當(dāng)利用SQL Server 創(chuàng)建一個應(yīng)用程序時,SQL 是一種主要的編程語言。若運用SQL 來進行編程,有兩種方法。其一是,在本地存儲SQL 程序,并創(chuàng)建應(yīng)用程序向SQL Server 發(fā)送命令來對結(jié)果進行處理。其二是,可以把部分用SQL 編寫的程序作為存儲過程存儲在SQL Server 中,并創(chuàng)建應(yīng)用程序來調(diào)用存儲過程,對數(shù)據(jù)結(jié)果進行處理存儲過程能夠通過接收參數(shù)向調(diào)用者返回結(jié)果集,結(jié)果集的格式由調(diào)
4、用者確定;返回狀態(tài)值給調(diào)用者,指明調(diào)用是成功或是失??;包括針對數(shù)據(jù)庫的操作語句,并且可以在一個存儲過程中調(diào)用另一存儲過程。1.2 存儲過程的優(yōu)點我們通常更偏愛于使用第二種方法,即在SQL Server 中使用存儲過程而不是在客戶計算機上調(diào)用SQL 編寫的一段程序,原因在于存儲過程具有以下優(yōu)點:(1) 存儲過程允許標(biāo)準(zhǔn)組件式編程存儲過程在被創(chuàng)建以后可以在程序中被多次調(diào)用,而不必重新編寫該存儲過程的SQL 語句。而且數(shù)據(jù)庫專業(yè)人員可隨時對存儲過程進行修改,但對應(yīng)用程序源代碼毫無影響(因為應(yīng)用程序源代碼只包含存儲過程的調(diào)用語句),從而極大地提高了程序的可移植性。1.2 存儲過程的優(yōu)點(2) 存儲過程
5、能夠?qū)崿F(xiàn)較快的執(zhí)行速度如果某一操作包含大量的SQL 代碼或被多次執(zhí)行,那么存儲過程要比批處理的執(zhí)行速度快很多。因為存儲過程是預(yù)編譯的,在首次運行一個存儲過程時,查詢優(yōu)化器對其進行分析、優(yōu)化,并給出最終被存在系統(tǒng)表中的執(zhí)行計劃。而批處理的SQL 語句在每次運行時都要進行編譯和優(yōu)化,因此速度相對要慢一些。1.2 存儲過程的優(yōu)點(3) 存儲過程能夠減少網(wǎng)絡(luò)流量 對于同一個針對數(shù)據(jù)數(shù)據(jù)庫對象的操作(如查詢、修改),如果這一操作所涉及到的 SQL 語句被組織成一存儲過程,那么當(dāng)在客戶計算機上調(diào)用該存儲過程時,網(wǎng)絡(luò)中傳送的只是該調(diào)用語句,否則將是多條SQL 語句,從而大大增加了網(wǎng)絡(luò)流量,降低網(wǎng)絡(luò)負(fù)載。1.
6、2 存儲過程的優(yōu)點(4)存儲過程可被作為一種安全機制來充分利用系統(tǒng)管理員通過對執(zhí)行某一存儲過程的權(quán)限進行限制,從而能夠?qū)崿F(xiàn)對相應(yīng)的數(shù)據(jù)訪問權(quán)限的限制,避免非授權(quán)用戶對數(shù)據(jù)的訪問,保證數(shù)據(jù)的安全。注意:存儲過程雖然既有參數(shù)又有返回值,但是它與函數(shù)不同。存儲過程的返回值只是指明執(zhí)行是否成功,并且它不能像函數(shù)那樣被直接調(diào)用,也就是在調(diào)用存儲過程時,在存儲過程名字前一定要有EXEC保留字存儲過程幾種寫法 1) 創(chuàng)建使用參數(shù)的存儲過程Create Proc au_info lastname varchar(40), firstname varchar(20)AsSelect au_lname,au_fn
7、ame,title,pub_nameFrom .where au_fname=firstname And au_lname=lastnameGoEXECUTE au_info ringer,annecreate procedure s_query name varchar(255)as select sno,sn,agefrom swhere sn=namegoexec s_query 李濤存儲過程幾種寫法2)創(chuàng)建使用參數(shù)默認(rèn)值的存儲過程,該存儲過程在沒有輸入?yún)?shù)的情況下將默認(rèn)值得到的結(jié)果輸出Create Proc au_info lastname varchar(40)=ringer, fi
8、rstname varchar(20)=anneAsSelect au_lname,au_fname,title,pub_nameFrom .where au_fname=firstname And au_lname=lastnameGoEXECUTE au_info create procedure s_query name varchar(255)=李濤as select sno,sn,agefrom swhere sn=namegoexec s_query存儲過程幾種寫法 3)用顯式值替代參數(shù)默認(rèn)值的存儲過程Create Proc showind table varchar(30) =t
9、itlesas SELECT Table_Name=,INDEX_Name=,index_id=indidfrom sysindexes inner join sysobjects on sysobjects.id=sysindexes.idwhere =tableEXECUTE showind authorscreate procedure s_query name varchar(255)=李濤as select sno,sn,agefrom swhere sn=namegoexec s_query
10、陳文存儲過程幾種寫法4)使用參數(shù)默認(rèn)值NULL來創(chuàng)建存儲過程,在這種情況下如果沒有提供參數(shù)值,SQL將不會出錯顯示Create Proc showind table varchar(30) =Nullas IF table is NUllprint 請輸入?yún)?shù)elseSELECT Table_Name=,INDEX_Name=,index_id=indidfrom sysindexs inner join sysobjects on sysobjects.id=sysindexes.idwhere =ta
11、bleEXECUTE showind authorscreate procedure s_query2 name varchar(255)=nullasIF name is NUllprint 請輸入?yún)?shù)else select sno,sn,agefrom swhere sn=namegoexec s_query2存儲過程幾種寫法5) 使用包含通配符的參數(shù)默認(rèn)值創(chuàng)建存儲過程,通配符包括(% , _ , 和 ),注意需要用Like關(guān)鍵字CREATE PROC au_info lastname varchar(40)=r% , firstname varchar(20)=% ASSelect au
12、_lname,au_fname,title,pub_namefrom authors inner join titleauthor on authors.au_id=titleauthor.au_id join titles on titleauthor.title_id=titles.title_idjoin publishers on titles.pub_id=publishers.pub_idwhere au_fname like firstnameand au_lname like lastnameGOcreate procedure s_query3 name varchar(25
13、5)asselect sno,sn,agefrom swhere sn like namegoexec s_query3 陳%1.3 觸發(fā)器的概念在SQL中,觸發(fā)器是一種特殊類型的存儲過程,它不同于SQL的存儲過程。觸發(fā)器主要是通過事件進行觸發(fā)而被執(zhí)行的,而存儲過程可以通過存儲過程名字而被直接調(diào)用。當(dāng)對某一表進行諸如UPDATE、 INSERT、 DELETE 這些操作時,SQL Server 就會自動執(zhí)行觸發(fā)器所定義的SQL 語句,從而確保對數(shù)據(jù)的處理必須符合由這些SQL 語句所定義的規(guī)則觸發(fā)器的主要作用就是其能夠?qū)崿F(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)的一致性。它維護不同表中數(shù)據(jù)
14、間關(guān)系的有關(guān)規(guī)則。定義一個好的觸發(fā)器對簡化數(shù)據(jù)的管理,保證數(shù)據(jù)庫的安全都有重要的影響。觸發(fā)器是針對表一級的,這就意味著,只有表的所有者有權(quán)創(chuàng)建表的觸發(fā)器。創(chuàng)建觸發(fā)器的語法:Create Triggerowner.觸發(fā)器名On owner.表名For insert,update,deleteAsBeginSQL語句(塊)End舉例比如,有兩個表 Student:學(xué)生表,學(xué)號為主鍵 BorrowRecord:借書記錄表,學(xué)號為外碼 用到的功能有:1.如果更改了學(xué)生的學(xué)號, 希望借書記錄仍然與這個學(xué)生相關(guān)(也就是同時更改借書記錄表的學(xué)號);2.如果該學(xué)生已經(jīng)畢業(yè),希望刪除學(xué)號的同時,也刪除借書記錄這時候可以用到觸發(fā)器。對于1,創(chuàng)建一個Update觸發(fā)器: Create Trigger truStudentOn Student-在Student表中創(chuàng)建觸發(fā)器for Update-為什么事件觸發(fā)As-事件觸發(fā)后所要做的事情 if Update(StudentID) beg
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南海區(qū)課題申報書
- 護理課題申報書范本
- 教學(xué)課題的申報書
- 合作購銷產(chǎn)品合同范例
- 商法學(xué)課題申報書
- 眼科課題申報書范文
- 江西省中醫(yī)課題申報書
- 【復(fù)習(xí)大串講】【中職專用】高二語文上學(xué)期期末綜合測試題(五)(職業(yè)模塊)(解析版)
- 做廣告物料合同范本
- 合作加工木炭合同范本
- 養(yǎng)老機構(gòu)安全隱患排查清單、自查表、治理整改臺賬
- 5.1 數(shù)據(jù)安全概述
- 幼兒園百科常識100題
- led燈具生產(chǎn)工藝過程流程圖
- 創(chuàng)意美術(shù)課3歲-12歲大師課《彼埃.蒙德里安》課件
- 哲學(xué)與人生(中職)PPT完整全套教學(xué)課件
- 社區(qū)免費使用房屋協(xié)議書
- 財務(wù)分析模板(43張)課件
- 一年級語文下冊《我多想去看看》教案
- 城市供水管網(wǎng)供水管網(wǎng)檢漏技術(shù)及儀器設(shè)備應(yīng)用課件
- 工程EPC總承包項目安全生產(chǎn)管理辦法
評論
0/150
提交評論