




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第7章存儲過程和觸發(fā)器7.1存儲過程7.2觸發(fā)器7.3本章小結(jié)
7.1存儲過程
7.1.1存儲過程概述
存儲過程中獨(dú)立存在于表之外的數(shù)據(jù)庫對象,由被編譯在一起的一組Transact-SQL語句組成。它可以被客服調(diào)用,也可以被另一個存儲過程或觸發(fā)器調(diào)用,它的參數(shù)可以被傳遞,它的出錯代碼也可以被檢驗(yàn)。存儲過程可以使對數(shù)據(jù)庫的管理,以及顯示關(guān)于數(shù)據(jù)庫及其用戶信息的工作容易得多。可以在任何可使用SQL語句的場合來使用存儲過程,它具有以下優(yōu)點(diǎn):
(1)可以在單個存儲過程中執(zhí)行一系列SQL語句。
(2)可以從自己的存儲過程內(nèi)引用其他存儲過程,從而簡化一系列復(fù)雜語句。
(3)存儲過程在創(chuàng)建時即在服務(wù)器上進(jìn)行編譯,所以執(zhí)行起來比單個SQL語句快,且能減少網(wǎng)絡(luò)通信的負(fù)擔(dān)。7.1.2創(chuàng)建存儲過程
要使用存儲過程,首先要創(chuàng)建一個存儲過程??梢允褂肨ransact-SQL語言的createprocedure語句,也可以使用企業(yè)管理器或者存儲過程創(chuàng)建向?qū)硗瓿伞?/p>
1.使用createprocedure語句創(chuàng)建存儲過程
createprocedure語句的語法格式為:
【例1】創(chuàng)建一個簡單的存儲過程procedure1,用于檢索所有學(xué)生的成績記錄。通過下述sql語句執(zhí)行該存儲過程:
use學(xué)生成績管理
/*判斷procedure1存儲過程是否存在,若存在,則執(zhí)行它*/
ifexists(selectnamefromsysobjects
wherename=‘procedure1’andtype=‘p’)
execprocedure1/*執(zhí)行存儲過程procedure1*/
go
執(zhí)行結(jié)果如圖7-1所示。圖7-1執(zhí)行結(jié)果
2.使用企業(yè)管理器創(chuàng)建存儲過程
使用企業(yè)管理器創(chuàng)建存儲過程的操作步驟如下:圖7-2創(chuàng)建存儲過程
3.使用向?qū)?chuàng)建
SQLServer2000還提供了創(chuàng)建存儲過程的向?qū)А?/p>
【例2】使用向?qū)?chuàng)建一個存儲過程procedure2,對應(yīng)的操作步驟如下:圖7-3“選擇向?qū)А睂υ捒驁D7-4選擇數(shù)據(jù)庫圖7-5選擇存儲過程圖7-6完成創(chuàng)建存儲過程圖7-7編輯存儲過程圖7-8“編輯存儲過程SQL”對話框7.1.3執(zhí)行存儲過程
執(zhí)行存儲過程使用execute語句,其完整語法格式如下:
[exec[ute]]
[@return_status=]
{procedure_name[;number]|@procedure_name_var}
[[@parameter=]{value|@variable[output]|[default]]
[,…n]
[withrecompile]7.1.4存儲過程的參數(shù)
在創(chuàng)建和使用存儲過程時,其參數(shù)是非常重要的。下面詳細(xì)討論存儲過程的參數(shù)傳遞和返回。
1.使用參數(shù)
在調(diào)用存儲過程時,有兩種傳遞參數(shù)的方法。第一種是在傳遞參數(shù)時,使傳遞的參數(shù)和定義時的參數(shù)順序一致,對于使用默認(rèn)值的參數(shù)可以用default代替。
2.使用默認(rèn)參數(shù)
創(chuàng)建存儲過程時,可以為參數(shù)提供一個默認(rèn)值,默認(rèn)值必須為常量或者null。
【例3】創(chuàng)建一個存儲過程insert_學(xué)生表2_2,該存儲過程中包含兩個參數(shù),其默認(rèn)值分別為'2013008','外語'和'北京'。圖7-9執(zhí)行結(jié)果
3.使用返回參數(shù)
在創(chuàng)建存儲過程時,可以定義返回參數(shù)。在執(zhí)行存儲過程時,可以將結(jié)果返回給返回參數(shù)。返回參數(shù)應(yīng)用output進(jìn)行說明。
【例4】創(chuàng)建一個存儲過程average,它返回兩個參數(shù)@st_name和@st_avg,分別代表了姓名和平均分。圖7-10執(zhí)行結(jié)果
4.存儲過程的返回值
存儲過程在執(zhí)行后都會返回一個整型值。如果執(zhí)行成功,則返回0;否則返回-1~-99之間的數(shù)值。也可以使用return語句來指定一個返回值。
【例5】創(chuàng)建的存儲過程test_ret根據(jù)輸入的參數(shù)來判斷返回值。7.1.5存儲過程的查看、修改和刪除
可以使用sp_helptext存儲過程來查看存儲過程的定義信息。
【例6】要查看前面的test_ret存儲過程的定義信息,可以執(zhí)行下面的SQL語句。
use學(xué)生成績管理
go
execsp_helptexttest_ret
go
執(zhí)行結(jié)果如圖7-11所示。圖7-11執(zhí)行結(jié)果圖7-12“存儲過程屬性”對話框
7.2觸發(fā)器
7.2.1觸發(fā)器概述
觸發(fā)器在insert、update或delete語句對表或視圖進(jìn)行修改時會被自動執(zhí)行。觸發(fā)器可以查詢其他表,并可以包含復(fù)雜的Transact-SQL語句。一個表可以有多個觸發(fā)器。7.2.2創(chuàng)建觸發(fā)器
在創(chuàng)建觸發(fā)器前,應(yīng)該考慮到下列問題:
(1)?createtrigger語句必須是批處理中的第一個語句。該批處理中隨后的其他所有語句將被解釋為createtrigger語句定義的一部分。
(2)創(chuàng)建觸發(fā)器的權(quán)限默認(rèn)分配給表的所有者,且不能將該權(quán)限轉(zhuǎn)給其他用戶。
(3)觸發(fā)器為數(shù)據(jù)庫對象,其名稱必須遵循標(biāo)識符的命名規(guī)則。
(4)雖然觸發(fā)器可以引用當(dāng)前數(shù)據(jù)庫以外的對象,但只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建觸發(fā)器。
(5)雖然不能在臨時表或系統(tǒng)表上創(chuàng)建觸發(fā)器,但是觸發(fā)器可以引用臨時表。觸發(fā)器不應(yīng)引用系統(tǒng)表,而應(yīng)使用信息架構(gòu)視圖。
(6)在含有用delete或update操作定義的外鍵的表中,不能定義insteadof和insteadofupdate觸發(fā)器。
(7)雖然truncatetable語句沒有類似where子句(用于刪除行)的delete語句,但它并不會引發(fā)delete觸發(fā)器,因?yàn)閠runcatetable語句沒有記錄。
(8)?writetext語句不會引發(fā)insert或update觸發(fā)器。創(chuàng)建觸發(fā)器時需要指定下面的選項(xiàng):
(1)觸發(fā)器的名稱,必須遵循標(biāo)識符的命名規(guī)則。
(2)需定義觸發(fā)器的表。
(3)觸發(fā)器將何時激發(fā)。
(4)激活觸發(fā)器的數(shù)據(jù)修改語句。有效選項(xiàng)為insert,update或delete。多個數(shù)據(jù)修改語句可激活同一個觸發(fā)器。例如,觸發(fā)器可由insert或update語句激活。
(5)執(zhí)行觸發(fā)操作的編程語句。
1.使用Transact-SQL語句創(chuàng)建觸發(fā)器
創(chuàng)建觸發(fā)器可以使用createtrigger語句,其語法格式如下:
【例7】創(chuàng)建一個觸發(fā)器,在插入、修改和刪除記錄時,都會自動顯示表中的內(nèi)容。
2.使用企業(yè)管理器
使用企業(yè)管理器創(chuàng)建觸發(fā)器的操作步驟如下:圖7-13管理觸發(fā)器快捷菜單圖7-14“觸發(fā)器屬性”對話框7.2.3inserted表和deleted表
在觸發(fā)器執(zhí)行的時候,會產(chǎn)生兩個臨時表:inserted表和deleted表。它們的結(jié)構(gòu)和觸發(fā)器所在的表的結(jié)構(gòu)相同,SQLServer2000自動創(chuàng)建和管理這些表。可以使用這兩個臨時的駐留內(nèi)存的表測試某些數(shù)據(jù)修改的效果及設(shè)置觸發(fā)器操作的條件;然而,不能直接對表中的數(shù)據(jù)進(jìn)行更改。
【例8】下面的例子說明了inserted表和deleted表的作用。7.2.4使用觸發(fā)器
1.insert和update觸發(fā)器
當(dāng)向表中插入或者更新記錄時,insert或者update觸發(fā)器被執(zhí)行。一般情況下,這兩種觸發(fā)器常用來檢查插入或者修改后的數(shù)據(jù)是否滿足要求。
【例9】下面創(chuàng)建的trig2觸發(fā)器可用來檢查插入的c1是否在1~108之間。
2.delete觸發(fā)器
delete觸發(fā)器通常用于下面的情況:
(1)防止那些確實(shí)要刪除,但是可能會引起數(shù)據(jù)一致性問題的情況,一般用在有外部鍵記錄時。
(2)用于級聯(lián)刪除操作。
【例10】學(xué)生成績管理數(shù)據(jù)庫中,學(xué)生表包含學(xué)生基本數(shù)據(jù),而成績表包含學(xué)生的成績,當(dāng)刪除學(xué)生表中的學(xué)生記錄時,應(yīng)該同時刪除成績表中對應(yīng)的成績記錄。實(shí)現(xiàn)該功能的觸發(fā)器如下。此時,要刪除學(xué)生表中的記錄:
delete學(xué)生表where學(xué)號='213006'
則學(xué)生表中對應(yīng)的記錄也被刪除。如果使用select語句來查詢成績表,將看到其中學(xué)號為'213006'的兩個記錄已經(jīng)被刪除。7.2.5修改觸發(fā)器
修改觸發(fā)器可以使用altertrigger語句,其語法格式如下:7.2.6刪除觸發(fā)器
除了使用企業(yè)管理器刪除觸發(fā)器外,也可以使用droptrigger語句來刪除觸發(fā)器。其語法格式如下:
droptrigger{trigger}[,…n]
其中,“trigger”是要刪除的觸發(fā)器名稱,而n是表示可以指定多個觸發(fā)器的占位符。
【例11】要刪除trig1觸發(fā)器,則可以執(zhí)行下面的SQL語句。
droptriggertrig17.2.7嵌套觸發(fā)器
如果一個觸發(fā)器在執(zhí)行操作時引發(fā)了另一個觸發(fā)器,而這個觸發(fā)器又接著引發(fā)下一個觸發(fā)器,如此等等。這些觸發(fā)器就是嵌套觸發(fā)器。觸發(fā)器可嵌套至32層,可
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 購物中心的市場定位策略與消費(fèi)者心理分析
- 高效率談判模式推動醫(yī)療器械與藥物的智能化的數(shù)字解決方案
- 超車、并線中的危險因素及預(yù)防措施
- 高科技辦公室的空間布局及裝修設(shè)計(jì)要點(diǎn)
- 高效行政打造卓越的日程安排
- 軟件界面的色彩美學(xué)用戶體驗(yàn)與視覺設(shè)計(jì)
- 跨文化營銷在跨境電商的實(shí)踐與影響
- 超市智能化貨架的應(yīng)用與發(fā)展趨勢
- 天津2025年02月中國北方人才市場(天津市人才服務(wù)中心)公開招考2名工作人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 顧客消費(fèi)決策心理在足浴行業(yè)的運(yùn)用
- 2024年山東圣翰財(cái)貿(mào)職業(yè)學(xué)院單招綜合素質(zhì)考試題庫含答案(綜合卷)
- 肝與膽病辨證課件
- 部編版語文七年級下冊第三單元大單元整體教學(xué)設(shè)計(jì)
- 《經(jīng)營模式淺談》課件
- 常見恐龍簡介
- 第三章 計(jì)算機(jī)信息檢索技術(shù)
- 第1課+古代亞非(教學(xué)設(shè)計(jì))【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 2024年湖南科技職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 疏散路線智能規(guī)劃系統(tǒng)
- 血透高磷個案護(hù)理
- 統(tǒng)編版語文四年級下冊第六單元教材解讀解讀與集體備課課件
評論
0/150
提交評論