計(jì)算機(jī)原理-第9章-存儲過程與觸發(fā)器課件_第1頁
計(jì)算機(jī)原理-第9章-存儲過程與觸發(fā)器課件_第2頁
計(jì)算機(jī)原理-第9章-存儲過程與觸發(fā)器課件_第3頁
計(jì)算機(jī)原理-第9章-存儲過程與觸發(fā)器課件_第4頁
計(jì)算機(jī)原理-第9章-存儲過程與觸發(fā)器課件_第5頁
已閱讀5頁,還剩221頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

學(xué)習(xí)目標(biāo):

通過本章學(xué)習(xí),你能夠?qū)W會(huì):1.了解存儲過程與觸發(fā)器的特性2.了解存儲過程與觸發(fā)器的優(yōu)點(diǎn)3.應(yīng)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程與與觸發(fā)器的操作。4.應(yīng)熟練掌握使用T-SQL語句創(chuàng)建、修改、刪除和查看存儲過程,及如何執(zhí)行存儲過程與與觸發(fā)器的操作。第9章存儲過程與觸發(fā)器

學(xué)習(xí)目標(biāo):第9章存儲過程與觸發(fā)器1存儲過程與觸發(fā)器是SQLServer中的兩類數(shù)據(jù)庫對象。它們都是由T-SQL語句編寫而成的過程,所不同的是存儲過程是由用戶根據(jù)需要調(diào)用執(zhí)行的,而觸發(fā)器則是由某個(gè)動(dòng)作(如刪除或修改一條記錄)引發(fā)執(zhí)行的。另外,存儲過程可以不依附于表而單獨(dú)存在,而觸發(fā)器則必須依附于一個(gè)特定的表。它們與函數(shù)也不同,函數(shù)可以直接通過函數(shù)名返回?cái)?shù)值,其返回值可以直接在表達(dá)式中使用,而存儲過程與觸發(fā)器則不能直接通過其名稱帶回返回值,也不能直接在表達(dá)式中使用。

第9章存儲過程與觸發(fā)器

存儲過程與觸發(fā)器是SQLServer中的兩類數(shù)29.1存儲過程概念[實(shí)例9.1]了解存儲過程的執(zhí)行過程,如圖9.1所示。

歸納分析:

在SQLServer中定義的過程被稱為存儲過程。存儲過程是一組預(yù)先編譯好的T-SQL代碼,作為一個(gè)整體用于執(zhí)行特定的操作。存儲過程屬于數(shù)據(jù)庫對象,它們存放在數(shù)據(jù)庫中,需要時(shí)用戶可以調(diào)用。

第9章存儲過程與觸發(fā)器

調(diào)用存儲過程(輸入?yún)?shù))存儲過程

輸出參數(shù)

執(zhí)行動(dòng)作

返回狀態(tài)值9.1存儲過程概念第9章存儲過程與觸發(fā)器調(diào)用存儲過程3

存儲過程具有如下優(yōu)點(diǎn):1.存儲過程將一系列復(fù)雜的T-SQL代碼封裝在一起作為數(shù)據(jù)庫對象存放在數(shù)據(jù)庫中,用戶使用時(shí)不必接觸T-SQL而僅需直接調(diào)用即可得到所需結(jié)果,簡化了用戶的操作。2.存儲過程已經(jīng)被編譯,執(zhí)行時(shí)省去了編譯與優(yōu)化的時(shí)間。另外,第一次從磁盤調(diào)用存儲過程后,它將駐留在內(nèi)存中,下一次使用時(shí)可以直接從內(nèi)存中調(diào)用,因此對于需要多次調(diào)用的存儲過程而言,速度明顯加快。3.在分布式查詢中,調(diào)用存儲過程的語句將比直接使用T-SQL的語句少得多,這將大大減少網(wǎng)絡(luò)流量。4.通過適當(dāng)?shù)臋?quán)限設(shè)置,可以使系統(tǒng)的安全性得到更有效的保障。

第9章存儲過程與觸發(fā)器

存儲過程具有如下優(yōu)點(diǎn):第9章存儲過程與觸發(fā)器49.2存儲過程分類[實(shí)例9.2]查看系統(tǒng)存儲過程。

操作步驟:

第9章存儲過程與觸發(fā)器

9.2存儲過程分類第9章存儲過程與觸發(fā)器5

歸納分析:SQLServer的存儲過程分為三大類:

1.系統(tǒng)存儲過程系統(tǒng)存儲過程是SQLServer內(nèi)置的存儲過程,可以直接用于執(zhí)行一些操作,用于進(jìn)行系統(tǒng)管理、登錄管理、權(quán)限設(shè)置、數(shù)據(jù)庫對象管理、查看數(shù)據(jù)庫信息、數(shù)據(jù)庫復(fù)制等操作。系統(tǒng)存儲過程存放在master數(shù)據(jù)庫中,以sp_作為前綴。在任何數(shù)據(jù)庫中無需用master限定就直接執(zhí)行。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器62.臨時(shí)存儲過程臨時(shí)存儲過程與臨時(shí)表類似。是對用戶定義的存儲過程。以#、或##開頭的存儲過程。無論用戶在哪個(gè)數(shù)據(jù)庫中創(chuàng)建,它們都存放在臨時(shí)數(shù)據(jù)庫tempdb中。以#開頭的存儲過程是局部臨時(shí)存儲過程,它僅能由其創(chuàng)建者本人在創(chuàng)建完后立即調(diào)用,一旦該創(chuàng)建者斷開與數(shù)據(jù)庫的連接,局部臨時(shí)存儲過程立即被刪除。以##開頭的存儲過程是全局臨時(shí)存儲過程,它可以由創(chuàng)建者本人和其他用戶在創(chuàng)建完后共同調(diào)用,一旦創(chuàng)建者斷開與數(shù)據(jù)庫的連接,則不再允許新的用戶使用,而且等其他正在使用該存儲過程的用戶使用完畢后,全局臨時(shí)存儲過程也被刪除。

第9章存儲過程與觸發(fā)器

2.臨時(shí)存儲過程第9章存儲過程與觸發(fā)器73.擴(kuò)展存儲過程是利用高級語言(如C語言)編寫的存儲過程,是SQLServer可以動(dòng)態(tài)裝載并執(zhí)行的動(dòng)態(tài)鏈接庫(DLL)。擴(kuò)展存儲過程只能添加到master數(shù)據(jù)庫中。本章不介紹擴(kuò)展存儲過程有關(guān)內(nèi)容,讀者可以參考其他書籍有關(guān)內(nèi)容。

第9章存儲過程與觸發(fā)器

3.擴(kuò)展存儲過程第9章存儲過程與觸發(fā)器89.3存儲過程創(chuàng)建9.3.1使用企業(yè)管理器創(chuàng)建存儲過程[實(shí)例9.3]在企業(yè)管理器中建立名為pro_new的存儲過程,并執(zhí)行。

操作步驟:

第9章存儲過程與觸發(fā)器

9.3存儲過程創(chuàng)建第9章存儲過程與觸發(fā)器9

歸納分析:如果是查看或修改已有存儲過程的定義,則右擊要查看或修改的存儲過程,在彈出的快捷菜單中,選擇“屬性”命令,則調(diào)出“存儲過程屬性”窗口,在這里可以查看或修改存儲過程的定義。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器109.3.2使用T-SQL語句創(chuàng)建存儲過程[實(shí)例9.4]在“學(xué)生”數(shù)據(jù)庫中建立一個(gè)存儲過程pro_new1,用于查詢所有學(xué)生的學(xué)號和數(shù)學(xué)期中成績、計(jì)算機(jī)期中成績,要求數(shù)學(xué)期中成績和計(jì)算機(jī)期中成績分別列出。已知數(shù)學(xué)期中成績的課程號是1002、計(jì)算機(jī)期中成績的課程號是2005。

操作步驟:

第9章存儲過程與觸發(fā)器

9.3.2使用T-SQL語句創(chuàng)建存儲過程第9章存儲過程11

歸納分析:如果是查看或修改已有存儲過程的定義,則右擊要查看或修改的存儲過程,在彈出的快捷菜單中,選擇“屬性”命令,則調(diào)出“存儲過程屬性”窗口,在這里可以查看或修改存儲過程的定義。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器129.3.2使用T-SQL語句創(chuàng)建存儲過程[實(shí)例9.4]在“學(xué)生”數(shù)據(jù)庫中建立一個(gè)存儲過程pro_new1,用于查詢所有學(xué)生的學(xué)號和數(shù)學(xué)期中成績、計(jì)算機(jī)期中成績,要求數(shù)學(xué)期中成績和計(jì)算機(jī)期中成績分別列出。已知數(shù)學(xué)期中成績的課程號是1002、計(jì)算機(jī)期中成績的課程號是2005。

操作步驟:

第9章存儲過程與觸發(fā)器

9.3.2使用T-SQL語句創(chuàng)建存儲過程第9章存儲過程13歸納分析:在SQLServer中,使用CREATEPROCEDURE語句創(chuàng)建一個(gè)永久或臨時(shí)存儲過程。

命令格式:

CREATEPROCEDURE存儲過程名[WITHENCRYPTION][WITHRECOMPILE]

ASSQL語句命令說明:(1)WITHENCRYPTION:對存儲過程進(jìn)行加密。(2)WITHRECOMPILE:對存儲過程重新編譯。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器149.4執(zhí)行存儲過程[實(shí)例9.5]分別執(zhí)行[實(shí)例9.3]、[實(shí)例9.4]建立存儲過程。

操作步驟:

第9章存儲過程與觸發(fā)器

9.4執(zhí)行存儲過程第9章存儲過程與觸發(fā)器15歸納分析:注意:執(zhí)行存儲過程時(shí),區(qū)分大小寫。存儲過程一旦編寫好后,就可以調(diào)用執(zhí)行。執(zhí)行存儲過程的語法如下。命令格式:

EXEC[UTE]存儲過程名{@字符串變量|[N]’SQL語句字符串’}[+…n]

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器169.5修改存儲過程9.5.1更改存儲過程名稱[實(shí)例9.6]將[實(shí)例9.3]所創(chuàng)建的名為pro_new存儲過程,修改成名為pro_存儲過程。

操作步驟:

(1)

啟動(dòng)“查詢分析器”,輸入如下SQL語句:

sp_renamepro_new,pro_存儲過程(2)按“F5”鍵或單擊工具欄“執(zhí)行查詢”圖標(biāo)。

第9章存儲過程與觸發(fā)器

9.5修改存儲過程第9章存儲過程與觸發(fā)器17歸納分析:只有數(shù)據(jù)庫所有者和存儲過程的所有者才有權(quán)修改存儲過程名稱。不宜輕易修改存儲過程名稱,因?yàn)橄到y(tǒng)中許多應(yīng)用程序可能都要調(diào)用存儲過程,如果修改了存儲過程的名稱,則這些應(yīng)用程序都要隨之改動(dòng)。命令格式:

sp_rename原存儲過程名,新存儲過程名

修改存儲過程名稱的方法與修改表名稱的方法類同,讀者可以參照執(zhí)行。使用企業(yè)管理器修改存儲過程名稱的方法也類似于修改表名稱的方法,即展開指定的數(shù)據(jù)庫節(jié)點(diǎn),單擊存儲過程,在右邊的窗口中選中一個(gè)需要修改名稱的存儲過程右擊之,在彈出的快捷菜單中選擇“重命名”。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器189.5.2修改存儲過程的參數(shù)與定義1.使用企業(yè)管理器修改存儲過程[實(shí)例9.7]使用企業(yè)管理器修改存儲過程[實(shí)例9.4],增加顯示課程號的列。

操作步驟:

第9章存儲過程與觸發(fā)器

9.5.2修改存儲過程的參數(shù)與定義第9章存儲過程與觸發(fā)192.使用T-SQL語句修改存儲過程[實(shí)例9.8]在[實(shí)例9.4]創(chuàng)建的存儲過程,修改查詢記錄按名次排列。

操作步驟:

第9章存儲過程與觸發(fā)器

2.使用T-SQL語句修改存儲過程第9章存儲過程與觸20歸納分析:修改已經(jīng)創(chuàng)建的存儲過程,可以不更改其用戶的使用權(quán)限,也不更改其名稱,因此不會(huì)破壞其他相關(guān)程序的引用關(guān)系。

命令格式:

ALTERPROC[EDURE]存儲過程名[WITHENCRYPTION][WITHRECOMPILE]

ASSQL語句

命令說明:其中各項(xiàng)語法含義與創(chuàng)建存儲過程類似。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器219.6刪除存儲過程9.6.1使用企業(yè)管理器刪除存儲過程[實(shí)例9.9]使用企業(yè)管理器刪除存儲過程。

操作步驟:

第9章存儲過程與觸發(fā)器

9.6刪除存儲過程第9章存儲過程與觸發(fā)器22存儲過程與觸發(fā)器是SQLServer中的兩類數(shù)據(jù)庫對象。它們都是由T-SQL語句編寫而成的過程,所不同的是存儲過程是由用戶根據(jù)需要調(diào)用執(zhí)行的,而觸發(fā)器則是由某個(gè)動(dòng)作(如刪除或修改一條記錄)引發(fā)執(zhí)行的。另外,存儲過程可以不依附于表而單獨(dú)存在,而觸發(fā)器則必須依附于一個(gè)特定的表。它們與函數(shù)也不同,函數(shù)可以直接通過函數(shù)名返回?cái)?shù)值,其返回值可以直接在表達(dá)式中使用,而存儲過程與觸發(fā)器則不能直接通過其名稱帶回返回值,也不能直接在表達(dá)式中使用。

第9章存儲過程與觸發(fā)器

存儲過程與觸發(fā)器是SQLServer中的兩類數(shù)23

歸納分析:SQLServer的存儲過程分為三大類:

1.系統(tǒng)存儲過程系統(tǒng)存儲過程是SQLServer內(nèi)置的存儲過程,可以直接用于執(zhí)行一些操作,用于進(jìn)行系統(tǒng)管理、登錄管理、權(quán)限設(shè)置、數(shù)據(jù)庫對象管理、查看數(shù)據(jù)庫信息、數(shù)據(jù)庫復(fù)制等操作。系統(tǒng)存儲過程存放在master數(shù)據(jù)庫中,以sp_作為前綴。在任何數(shù)據(jù)庫中無需用master限定就直接執(zhí)行。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器24

歸納分析:如果是查看或修改已有存儲過程的定義,則右擊要查看或修改的存儲過程,在彈出的快捷菜單中,選擇“屬性”命令,則調(diào)出“存儲過程屬性”窗口,在這里可以查看或修改存儲過程的定義。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器25歸納分析:在SQLServer中,使用CREATEPROCEDURE語句創(chuàng)建一個(gè)永久或臨時(shí)存儲過程。

命令格式:

CREATEPROCEDURE存儲過程名[WITHENCRYPTION][WITHRECOMPILE]

ASSQL語句命令說明:(1)WITHENCRYPTION:對存儲過程進(jìn)行加密。(2)WITHRECOMPILE:對存儲過程重新編譯。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器26歸納分析:只有數(shù)據(jù)庫所有者和存儲過程的所有者才有權(quán)修改存儲過程名稱。不宜輕易修改存儲過程名稱,因?yàn)橄到y(tǒng)中許多應(yīng)用程序可能都要調(diào)用存儲過程,如果修改了存儲過程的名稱,則這些應(yīng)用程序都要隨之改動(dòng)。命令格式:

sp_rename原存儲過程名,新存儲過程名

修改存儲過程名稱的方法與修改表名稱的方法類同,讀者可以參照執(zhí)行。使用企業(yè)管理器修改存儲過程名稱的方法也類似于修改表名稱的方法,即展開指定的數(shù)據(jù)庫節(jié)點(diǎn),單擊存儲過程,在右邊的窗口中選中一個(gè)需要修改名稱的存儲過程右擊之,在彈出的快捷菜單中選擇“重命名”。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器279.6刪除存儲過程9.6.1使用企業(yè)管理器刪除存儲過程[實(shí)例9.9]使用企業(yè)管理器刪除存儲過程。

操作步驟:

第9章存儲過程與觸發(fā)器

9.6刪除存儲過程第9章存儲過程與觸發(fā)器289.6.2使用T-SQL語言刪除存儲過程[實(shí)例9.10]刪除Pro_new存儲過程。

操作步驟:(1)

啟動(dòng)“查詢分析器”,輸入如下SQL語句:

DROPPROCEDUREPro_new(2)按“F5”鍵或單擊工具欄“執(zhí)行查詢”圖標(biāo)。歸納分析:不再需要存儲過程時(shí),可以利用企業(yè)管理器或T-SQL語言刪除。

命令格式:

DROPPROCEDURE存儲過程名稱或存儲過程組名稱

注意:刪除存儲過程組時(shí)不必寫出下標(biāo),即可將組中所有成員全部刪除。

第9章存儲過程與觸發(fā)器

9.6.2使用T-SQL語言刪除存儲過程第9章存儲過程299.7查看存儲過程9.7.1使用企業(yè)管理器查看存儲過程的信息[實(shí)例9.11]使用企業(yè)管理器查看存儲過程的信息。

操作步驟:在圖9.4所示屬性對話框中可以查詢存儲過程的名稱、所有者、建立時(shí)間和文本信息。在圖9.3所示窗口的右部選中一個(gè)存儲過程并右擊,在彈出的級聯(lián)菜單中依次選擇“所有任務(wù)”、“顯示相關(guān)性”,系統(tǒng)會(huì)彈出“顯示相關(guān)性”對話框,該對話框顯示一個(gè)存儲過程所引用的表及其列信息。

第9章存儲過程與觸發(fā)器

9.7查看存儲過程第9章存儲過程與觸發(fā)器309.7.2使用T-SQL語言查看存儲過程的信息[實(shí)例9.12]利用系統(tǒng)存儲過程查詢pro_存儲過程的信息。

操作步驟:

第9章存儲過程與觸發(fā)器

9.7.2使用T-SQL語言查看存儲過程的信息第9章存31

歸納分析:(1)查看定義存儲過程的文本命令格式:

sp_helptext[@obiname=]'存儲過程名’(2)查看存儲過程的名稱、所有者、建立時(shí)間命令格式:

sp_help[@obiname=]'存儲過程名’(3)查看存儲過程所引用的表(或查看一個(gè)表被哪些存儲過程所引用)命令格式:

sp_depends[@obiname=]'表名’(4)查看一個(gè)存儲過程引用了哪些表及其列:

sp_depends[@obiname=]'存儲過程名’

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)32

歸納分析:(1)查看定義存儲過程的文本命令格式:

sp_helptext[@obiname=]'存儲過程名’(2)查看存儲過程的名稱、所有者、建立時(shí)間命令格式:

sp_help[@obiname=]'存儲過程名’(3)查看存儲過程所引用的表(或查看一個(gè)表被哪些存儲過程所引用)命令格式:

sp_depends[@obiname=]'表名’(4)查看一個(gè)存儲過程引用了哪些表及其列:

sp_depends[@obiname=]'存儲過程名’

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)33命令格式:

CREATEPROCEDURE存儲過程名@參數(shù)名數(shù)據(jù)類型[=默認(rèn)值][WITHENENCRYPTION][WITHRERECOMPILE]

ASSQL語句命令說明:“@參數(shù)名”和定義局部變量一樣,必須以符號@為前綴,要指定數(shù)據(jù)類型,多個(gè)參數(shù)定義要用逗號“,”隔開。在執(zhí)行存儲過程時(shí)該參數(shù)將由指定的參數(shù)值來代替,如果執(zhí)行時(shí)未提供該參數(shù)的參數(shù)值,則如果這里定義了默認(rèn)值則使用該值作為執(zhí)行時(shí)的參數(shù)值,默認(rèn)值可以是常量或空(NULL)。

第9章存儲過程與觸發(fā)器

命令格式:第9章存儲過程與觸發(fā)器349.9創(chuàng)建觸發(fā)器SQLServer2000提供了兩種主要機(jī)制用于維護(hù)數(shù)據(jù)的完整性:一種是第8章介紹的約束,另一種就是本章將要介紹的觸發(fā)器。觸發(fā)器雖然是一種特殊的存儲過程,但是它與表卻是緊密聯(lián)系的,離開了表它將不復(fù)存在(這點(diǎn)與約束十分類似)。觸發(fā)器又不像存儲過程那樣需要調(diào)用才能執(zhí)行,而是在對表中數(shù)據(jù)進(jìn)行增、刪、改(INSERT、UPDATE、DELETE)操作時(shí)被觸發(fā)而執(zhí)行。觸發(fā)器可以包含復(fù)雜的T-SQL語句。在觸發(fā)器內(nèi)設(shè)置回滾,可以將觸發(fā)它的語句所在的事務(wù)全部回滾,這樣檢測到錯(cuò)誤時(shí)可以回滾事務(wù)以撤銷錯(cuò)誤。

第9章存儲過程與觸發(fā)器

9.9創(chuàng)建觸發(fā)器第9章存儲過程與觸發(fā)器359.9.2使用T-SQL語句創(chuàng)建觸發(fā)器[實(shí)例9.16]建立一個(gè)觸發(fā)器,防止用戶在要?jiǎng)h除表學(xué)生信息中的一條數(shù)據(jù)時(shí),由于沒有使用限制條件(誤用SELECTFROM學(xué)生信息語句)而導(dǎo)致刪除全部數(shù)據(jù)的情況發(fā)生。

操作步驟:

第9章存儲過程與觸發(fā)器

9.9.2使用T-SQL語句創(chuàng)建觸發(fā)器第9章存儲過程與36(4)[INSERT][,][UPDATE][,][DELETE]:指定在表或視圖上執(zhí)行哪些數(shù)據(jù)修改語句時(shí)將激活觸發(fā)器。必須至少指定一個(gè)選項(xiàng),如果指定的選項(xiàng)多于一個(gè),需用逗號分隔。(5)IFUPDATE(列名)[(AND|OR)UPDATE(列名)][..n]:判定某一列或幾列,是否被修改。如果希望僅當(dāng)某一列(或幾列)的數(shù)據(jù)發(fā)生變化才導(dǎo)致觸發(fā)器動(dòng)作,而其他列的數(shù)據(jù)變化不會(huì)引發(fā)觸發(fā)器執(zhí)行,則可以采用本選項(xiàng)。此時(shí)可以稱之為列級觸發(fā)器。第9章存儲過程與觸發(fā)器

(4)[INSERT][,][UPDATE][,][D37歸納分析:SQLServer2000中可以建立兩類觸發(fā)器,一類是在觸發(fā)后將執(zhí)行一組新的T-SQL語句用以代替引起觸發(fā)器執(zhí)行的語句(原有語句沒有執(zhí)行,僅執(zhí)行新語句),稱之為INSTEADOF觸發(fā)器:另一類是在引起觸發(fā)器執(zhí)行的語句執(zhí)行完畢后,再執(zhí)行觸發(fā)器中的語句,稱之為AFTER類觸發(fā)器。(1)INSTEADOF觸發(fā)器既可以在表上定義,也可以在視圖上定義。該類觸發(fā)器依據(jù)其觸發(fā)動(dòng)作(UPDATE、DELETE和INSERT)的不同分為INSTEADOFINSERT、INSTEADOFUPDATE和INSTEADOFDELETE三種,被引發(fā)執(zhí)行時(shí)將分別代替表或視圖的INSERT、UPDATE、DELETE操作,亦即表中的增刪改操作沒有進(jìn)行。每個(gè)觸發(fā)動(dòng)作僅可以定義一個(gè)INSTEADOF觸發(fā)器。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器389.11.2修改觸發(fā)器的定義

[實(shí)例9.21]在企業(yè)管理器中修改[實(shí)例9.17]將刪除表改為添加記錄。

操作步驟:(3)單擊檢查語法按鈕,進(jìn)行語法檢查,成功后,可插入數(shù)據(jù)檢驗(yàn)觸發(fā)器的效果。

第9章存儲過程與觸發(fā)器

9.11.2修改觸發(fā)器的定義第9章存儲過程與觸發(fā)器394.應(yīng)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程的操作。5.應(yīng)熟練掌握使用T-SQL語句創(chuàng)建、修改、刪除和查看存儲過程,及如何執(zhí)行存儲過程的操作。6.應(yīng)掌握使用T-SQL語句帶參數(shù)和變量創(chuàng)建和修改存儲過程,及如何執(zhí)行存儲過程。7.了解觸發(fā)器在對表中數(shù)據(jù)進(jìn)行增、刪、改(INSERT、UPDATE、DELETE)操作時(shí)被觸發(fā)而執(zhí)行。觸發(fā)器可以包含復(fù)雜的T-SQL語句。在觸發(fā)器內(nèi)設(shè)置回滾,可以將觸發(fā)它的語句所在的事務(wù)全部回滾,這樣檢測到錯(cuò)誤時(shí)可以回滾事務(wù)以撤銷錯(cuò)誤。8.觸發(fā)器的優(yōu)點(diǎn):(1)觸發(fā)器可以實(shí)現(xiàn)外鍵約束的功能,實(shí)現(xiàn)對表的級連修改。

第9章存儲過程與觸發(fā)器

4.應(yīng)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程409.15.2實(shí)訓(xùn)1.實(shí)訓(xùn)目的(1)

熟練掌握用T-SQL語句存儲過程與觸發(fā)器所需的記錄。(2)

熟練掌握用T-SQL語句編寫的操作過程。(3)熟練掌握存儲過程與觸發(fā)器的表示方法。(4)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程與與觸發(fā)器的操作。(5)熟練掌握使用T-SQL語句創(chuàng)建、修改、刪除和查看存儲過程,及如何執(zhí)行存儲過程與與觸發(fā)器的操作。2.實(shí)訓(xùn)環(huán)境SQLServer2000的運(yùn)行、管理環(huán)境。

第9章存儲過程與觸發(fā)器

9.15.2實(shí)訓(xùn)第9章存儲過程與觸發(fā)器419.8存儲過程編程9.8.1參數(shù)和變量[實(shí)例9.13]創(chuàng)建的存儲過程,修改成當(dāng)輸入學(xué)生學(xué)號時(shí)可以查詢某個(gè)學(xué)生的成績:不輸入學(xué)號時(shí),則查詢?nèi)繉W(xué)生的成績。

操作步驟:

第9章存儲過程與觸發(fā)器

9.8存儲過程編程第9章存儲過程與觸發(fā)器42(3)本例定義了一個(gè)輸入?yún)?shù)@stuID用于傳送學(xué)號,其默認(rèn)值為空。執(zhí)行存儲過程時(shí),如果指定了該輸入?yún)?shù)的值,則按照該參數(shù)所給的學(xué)號查詢指定學(xué)生的成績,如果參數(shù)@stuID的值為空,則查詢所有學(xué)生成績。輸入如圖9.8所示上部分程序,查看運(yùn)行結(jié)果,如圖9.8所示下部分。

第9章存儲過程與觸發(fā)器

(3)本例定義了一個(gè)輸入?yún)?shù)@stuID用于傳送學(xué)號,其默認(rèn)43歸納分析:1.建立帶輸入?yún)?shù)的存儲過程向存儲過程指定輸入、輸出參數(shù)的主要目的是通過參數(shù)向存儲過程輸入和輸出信息來擴(kuò)展存儲過程的功能。通過使用參數(shù),可以多次使用同一存儲過程并按用戶要求查找所需要的結(jié)果。如[實(shí)訓(xùn)9.13]所示,沒有參數(shù)就缺少靈活性。一個(gè)存儲過程可以帶一個(gè)或多個(gè)輸入?yún)?shù),輸入?yún)?shù)是指由調(diào)用程序向存儲過程傳遞的參數(shù),它們在創(chuàng)建存儲過程語句中被定義,在執(zhí)行存儲過程中給出相應(yīng)的參數(shù)值。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器44命令格式:

CREATEPROCEDURE存儲過程名@參數(shù)名數(shù)據(jù)類型[=默認(rèn)值][WITHENENCRYPTION][WITHRERECOMPILE]

ASSQL語句命令說明:“@參數(shù)名”和定義局部變量一樣,必須以符號@為前綴,要指定數(shù)據(jù)類型,多個(gè)參數(shù)定義要用逗號“,”隔開。在執(zhí)行存儲過程時(shí)該參數(shù)將由指定的參數(shù)值來代替,如果執(zhí)行時(shí)未提供該參數(shù)的參數(shù)值,則如果這里定義了默認(rèn)值則使用該值作為執(zhí)行時(shí)的參數(shù)值,默認(rèn)值可以是常量或空(NULL)。

第9章存儲過程與觸發(fā)器

命令格式:第9章存儲過程與觸發(fā)器45

2.執(zhí)行帶參數(shù)的存儲過程在執(zhí)行存儲過程的語句中,有兩種方式來傳遞參數(shù)值,分別是使用參數(shù)名傳遞參數(shù)值和按參數(shù)位置傳遞參數(shù)值。使用參數(shù)名傳遞參數(shù)值,是通過語句“@參數(shù)名:參數(shù)值”給參數(shù)傳遞值。當(dāng)存儲過程含有多個(gè)輸入?yún)?shù)時(shí),參數(shù)值可以按任意順序制定,對于允許空值和具有默認(rèn)值的輸入?yún)?shù)可以不給出參數(shù)的傳遞值。執(zhí)行使用參數(shù)名傳遞參數(shù)值的存儲過程的命令格式:

EXECUTE存儲過程名[@參數(shù)名=參數(shù)值]按參數(shù)位置傳遞參數(shù)值,不顯式地給出“@參數(shù)名”,而是按照參數(shù)定義的順序給出參數(shù)值。按位置傳遞參數(shù)時(shí),也可以忽略允許空值和具有默認(rèn)值的參數(shù),但不能因此破壞輸入?yún)?shù)的指定順序。必要時(shí),使用關(guān)鍵字“DEFAULT”作為默認(rèn)值的占位。第9章存儲過程與觸發(fā)器

2.執(zhí)行帶參數(shù)的存儲過程第9章存儲過程與觸發(fā)器469.8.2RETURN語句和錯(cuò)誤處理[實(shí)例9.14]在學(xué)生成績表基礎(chǔ)上建立一個(gè)存儲過程pro_new3,要求:未輸入學(xué)生學(xué)號時(shí)打印一個(gè)字符串“請輸入學(xué)號”,并返回?cái)?shù)字1;輸入的學(xué)號查詢不到時(shí)打印一個(gè)字符串“沒有您輸入的學(xué)號,請重新輸入”,并返回?cái)?shù)字2:輸入學(xué)生學(xué)號正確時(shí),查詢該學(xué)號對應(yīng)的期中成績(課程號為1002)考試成績。操作步驟:

第9章存儲過程與觸發(fā)器

9.8.2RETURN語句和錯(cuò)誤處理第9章存儲過程與觸47歸納分析:用戶可以通過RETUEN語句返回狀態(tài)值,RETURN語句只能返回整數(shù),在存儲過程中RETURN不能返回空值,默認(rèn)返回值是0。也可以利用它返回整數(shù)輸出參數(shù)值。

第9章存儲過程與觸發(fā)器

第9章存儲過程與觸發(fā)器489.9創(chuàng)建觸發(fā)器SQLServer2000提供了兩種主要機(jī)制用于維護(hù)數(shù)據(jù)的完整性:一種是第8章介紹的約束,另一種就是本章將要介紹的觸發(fā)器。觸發(fā)器雖然是一種特殊的存儲過程,但是它與表卻是緊密聯(lián)系的,離開了表它將不復(fù)存在(這點(diǎn)與約束十分類似)。觸發(fā)器又不像存儲過程那樣需要調(diào)用才能執(zhí)行,而是在對表中數(shù)據(jù)進(jìn)行增、刪、改(INSERT、UPDATE、DELETE)操作時(shí)被觸發(fā)而執(zhí)行。觸發(fā)器可以包含復(fù)雜的T-SQL語句。在觸發(fā)器內(nèi)設(shè)置回滾,可以將觸發(fā)它的語句所在的事務(wù)全部回滾,這樣檢測到錯(cuò)誤時(shí)可以回滾事務(wù)以撤銷錯(cuò)誤。

第9章存儲過程與觸發(fā)器

9.9創(chuàng)建觸發(fā)器第9章存儲過程與觸發(fā)器499.9.1使用企業(yè)管理器創(chuàng)建觸發(fā)器[實(shí)例9.15]在表學(xué)生成績中建立一個(gè)觸發(fā)器,當(dāng)向表中插入一條記錄時(shí),檢查該學(xué)生的學(xué)號是否存在于表學(xué)生信息中,如果存在,則插入;否則,打印“學(xué)號不存在”,并回滾事務(wù),使插入數(shù)據(jù)無效。

操作步驟:

第9章存儲過程與觸發(fā)器

9.9.1使用企業(yè)管理器創(chuàng)建觸發(fā)器第9章存儲過程與觸發(fā)器50歸納分析:創(chuàng)建觸發(fā)器之前要注意如下幾點(diǎn):

(1)創(chuàng)建觸發(fā)器所使用的語句CREATETRIGGER必須是批處理中的第一個(gè)語句。(2)只有表的所有者、sysadmin固定服務(wù)器角色成員以及db_owner和曲_ddladmin固定數(shù)據(jù)庫角色成員有權(quán)在本表上創(chuàng)建觸發(fā)器,且不能將該權(quán)限授予其他用戶。(3)觸發(fā)器為數(shù)據(jù)庫對象,其命名規(guī)則必須與標(biāo)識符命名規(guī)則一致。(4)只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建觸發(fā)器,但是觸發(fā)器可以引用其他數(shù)據(jù)庫的對象。(5)不能在臨時(shí)表或系統(tǒng)表上創(chuàng)建觸發(fā)器。觸發(fā)器可以引用臨時(shí)表,但不能引用系統(tǒng)表。(6)盡管TRUNCATETABLE語句用于刪除表中所有記錄,但由于它不寫入日志,故不能引發(fā)DELETE觸發(fā)器。第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器51

(7)WRITETEXT語句不會(huì)引發(fā)INSERT或UPDATE觸發(fā)器。(8)如果一個(gè)觸發(fā)器中含有回滾事務(wù)語句RULLBACKTRANSACTION,且引發(fā)觸發(fā)器的語句位于一個(gè)事務(wù)中,則該觸發(fā)器觸發(fā)時(shí)將回滾事務(wù)。(9)在觸發(fā)器內(nèi)不能使用的命令有:CREATE、ALTER、GRANT、REVOKE、TRUNCATETABLE、DROP等。(10)如果一個(gè)觸發(fā)器中含有回滾事務(wù)語句RULLBACKTRANSACTION,且引發(fā)該觸發(fā)器的語句位于一個(gè)批中,則一旦觸發(fā)器執(zhí)行,該批中引發(fā)觸發(fā)器執(zhí)行的語句之后的所有語句將不會(huì)執(zhí)行。第9章存儲過程與觸發(fā)器

(7)WRITETEXT語句不會(huì)引發(fā)INSERT或529.9.2使用T-SQL語句創(chuàng)建觸發(fā)器[實(shí)例9.16]建立一個(gè)觸發(fā)器,防止用戶在要?jiǎng)h除表學(xué)生信息中的一條數(shù)據(jù)時(shí),由于沒有使用限制條件(誤用SELECTFROM學(xué)生信息語句)而導(dǎo)致刪除全部數(shù)據(jù)的情況發(fā)生。

操作步驟:

第9章存儲過程與觸發(fā)器

9.9.2使用T-SQL語句創(chuàng)建觸發(fā)器第9章存儲過程與53(3)本例建立了一個(gè)AFIER觸發(fā)器(僅給出FOR表示默認(rèn)為AFTER型觸發(fā)器)用于DELETE操作,首先聲明一個(gè)局部變量用以存放Deleted表中數(shù)據(jù)行數(shù)。當(dāng)對學(xué)生信息表執(zhí)行刪除操作時(shí),檢查刪除的行數(shù)(Deleted表中數(shù)據(jù)行數(shù)),如果行數(shù)>1,則認(rèn)為操作錯(cuò)誤,打印提示信息并回滾事務(wù),使刪除無效。但是如果使用TRUNCATETABLE學(xué)生信息清除表中所有數(shù)據(jù),則觸發(fā)器不會(huì)觸發(fā),可以成功刪除全部數(shù)據(jù)。

第9章存儲過程與觸發(fā)器

(3)本例建立了一個(gè)AFIER觸發(fā)器(僅給出FOR表示默認(rèn)為54歸納分析:使用T-SQL語句創(chuàng)建觸發(fā)器基本語法如下。命令格式:

CREATETRIGGER觸發(fā)器名ON{表|視圖}[WITHENCRYPTION]{FOR|AFTER|INSTEADOF}{[INSERT][,][UPDATE][,][DELETE]}[NOTFORREPLICATION]

AS[{IFUPDATE(列名)[(AND|OR)UPDATE(列名)][..n]}

SQL語句第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器55

命令說明:(1)觸發(fā)器的名稱,必須符合標(biāo)識符規(guī)則,并且必須在數(shù)據(jù)庫中惟一。(2)WITHENCRYPTION用于加密CREATETRIGGER語句文本的條目。(3)FOR:用以指定觸發(fā)器的類型,該關(guān)鍵字可以省略。后面為AFTER時(shí)表示觸發(fā)器為AFTER類型,后面為INSTEADOF時(shí)表示觸發(fā)器為INSTEADOF類型。如果僅指定FOR關(guān)鍵字,則默認(rèn)為AFTER觸發(fā)器。

第9章存儲過程與觸發(fā)器

命令說明:第9章存儲過程與觸發(fā)器56(4)[INSERT][,][UPDATE][,][DELETE]:指定在表或視圖上執(zhí)行哪些數(shù)據(jù)修改語句時(shí)將激活觸發(fā)器。必須至少指定一個(gè)選項(xiàng),如果指定的選項(xiàng)多于一個(gè),需用逗號分隔。(5)IFUPDATE(列名)[(AND|OR)UPDATE(列名)][..n]:判定某一列或幾列,是否被修改。如果希望僅當(dāng)某一列(或幾列)的數(shù)據(jù)發(fā)生變化才導(dǎo)致觸發(fā)器動(dòng)作,而其他列的數(shù)據(jù)變化不會(huì)引發(fā)觸發(fā)器執(zhí)行,則可以采用本選項(xiàng)。此時(shí)可以稱之為列級觸發(fā)器。第9章存儲過程與觸發(fā)器

(4)[INSERT][,][UPDATE][,][D57(4)[INSERT][,][UPDATE][,][DELETE]:指定在表或視圖上執(zhí)行哪些數(shù)據(jù)修改語句時(shí)將激活觸發(fā)器。必須至少指定一個(gè)選項(xiàng),如果指定的選項(xiàng)多于一個(gè),需用逗號分隔。(5)IFUPDATE(列名)[(AND|OR)UPDATE(列名)][..n]:判定某一列或幾列,是否被修改。如果希望僅當(dāng)某一列(或幾列)的數(shù)據(jù)發(fā)生變化才導(dǎo)致觸發(fā)器動(dòng)作,而其他列的數(shù)據(jù)變化不會(huì)引發(fā)觸發(fā)器執(zhí)行,則可以采用本選項(xiàng)。此時(shí)可以稱之為列級觸發(fā)器。第9章存儲過程與觸發(fā)器

(4)[INSERT][,][UPDATE][,][D58UPDATE操作相當(dāng)于先執(zhí)行DELETE操作,然后再執(zhí)行INSERT操作,因此要用到Deleted與Inserted兩個(gè)表。

第9章存儲過程與觸發(fā)器

UPDATE操作相當(dāng)于先執(zhí)行DELETE操作,然59歸納分析:SQLServer2000中可以建立兩類觸發(fā)器,一類是在觸發(fā)后將執(zhí)行一組新的T-SQL語句用以代替引起觸發(fā)器執(zhí)行的語句(原有語句沒有執(zhí)行,僅執(zhí)行新語句),稱之為INSTEADOF觸發(fā)器:另一類是在引起觸發(fā)器執(zhí)行的語句執(zhí)行完畢后,再執(zhí)行觸發(fā)器中的語句,稱之為AFTER類觸發(fā)器。(1)INSTEADOF觸發(fā)器既可以在表上定義,也可以在視圖上定義。該類觸發(fā)器依據(jù)其觸發(fā)動(dòng)作(UPDATE、DELETE和INSERT)的不同分為INSTEADOFINSERT、INSTEADOFUPDATE和INSTEADOFDELETE三種,被引發(fā)執(zhí)行時(shí)將分別代替表或視圖的INSERT、UPDATE、DELETE操作,亦即表中的增刪改操作沒有進(jìn)行。每個(gè)觸發(fā)動(dòng)作僅可以定義一個(gè)INSTEADOF觸發(fā)器。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器609.11.2修改觸發(fā)器的定義

[實(shí)例9.21]在企業(yè)管理器中修改[實(shí)例9.17]將刪除表改為添加記錄。

操作步驟:(3)單擊檢查語法按鈕,進(jìn)行語法檢查,成功后,可插入數(shù)據(jù)檢驗(yàn)觸發(fā)器的效果。

第9章存儲過程與觸發(fā)器

9.11.2修改觸發(fā)器的定義第9章存儲過程與觸發(fā)器619.12刪除觸發(fā)器[實(shí)例9.23]刪除不用的觸發(fā)器名。操作步驟:

第9章存儲過程與觸發(fā)器

9.12刪除觸發(fā)器第9章存儲過程與觸發(fā)器62歸納分析:觸發(fā)器創(chuàng)建以后,可以使用系統(tǒng)存儲過程瀏覽觸發(fā)器的有關(guān)信息。(1)顯示觸發(fā)器對象的類型。創(chuàng)建時(shí)間、所有者信息。

sp_help觸發(fā)器名(2)顯示觸發(fā)器的定義文本。如果觸發(fā)器使用了加密(WITHENCRYPTION選項(xiàng)),則無法看到觸發(fā)器的代碼文本。

sp_helptext觸發(fā)器名第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器634.應(yīng)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程的操作。5.應(yīng)熟練掌握使用T-SQL語句創(chuàng)建、修改、刪除和查看存儲過程,及如何執(zhí)行存儲過程的操作。6.應(yīng)掌握使用T-SQL語句帶參數(shù)和變量創(chuàng)建和修改存儲過程,及如何執(zhí)行存儲過程。7.了解觸發(fā)器在對表中數(shù)據(jù)進(jìn)行增、刪、改(INSERT、UPDATE、DELETE)操作時(shí)被觸發(fā)而執(zhí)行。觸發(fā)器可以包含復(fù)雜的T-SQL語句。在觸發(fā)器內(nèi)設(shè)置回滾,可以將觸發(fā)它的語句所在的事務(wù)全部回滾,這樣檢測到錯(cuò)誤時(shí)可以回滾事務(wù)以撤銷錯(cuò)誤。8.觸發(fā)器的優(yōu)點(diǎn):(1)觸發(fā)器可以實(shí)現(xiàn)外鍵約束的功能,實(shí)現(xiàn)對表的級連修改。

第9章存儲過程與觸發(fā)器

4.應(yīng)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程649.15.2實(shí)訓(xùn)1.實(shí)訓(xùn)目的(1)

熟練掌握用T-SQL語句存儲過程與觸發(fā)器所需的記錄。(2)

熟練掌握用T-SQL語句編寫的操作過程。(3)熟練掌握存儲過程與觸發(fā)器的表示方法。(4)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程與與觸發(fā)器的操作。(5)熟練掌握使用T-SQL語句創(chuàng)建、修改、刪除和查看存儲過程,及如何執(zhí)行存儲過程與與觸發(fā)器的操作。2.實(shí)訓(xùn)環(huán)境SQLServer2000的運(yùn)行、管理環(huán)境。

第9章存儲過程與觸發(fā)器

9.15.2實(shí)訓(xùn)第9章存儲過程與觸發(fā)器659.10觸發(fā)器介紹觸發(fā)器具有如下優(yōu)點(diǎn):(1)觸發(fā)器可以實(shí)現(xiàn)外鍵約束的功能,實(shí)現(xiàn)對表的級連修改。(2)觸發(fā)器可以實(shí)現(xiàn)核查約束的功能,而且其功能更為強(qiáng)大。它可以使用另一個(gè)表的內(nèi)容來約束觸發(fā)器所在表。(3)如果對表中數(shù)據(jù)進(jìn)行了增、刪、改的操作,使用觸發(fā)器可以根據(jù)修改前后的差異,采取相應(yīng)的對策。(4)允許在一個(gè)表中針對不同的增刪改操作設(shè)置多個(gè)觸發(fā)器,以完成各類不同任務(wù)。

第9章存儲過程與觸發(fā)器

9.10觸發(fā)器介紹第9章存儲過程與觸發(fā)器66存儲過程與觸發(fā)器是SQLServer中的兩類數(shù)據(jù)庫對象。它們都是由T-SQL語句編寫而成的過程,所不同的是存儲過程是由用戶根據(jù)需要調(diào)用執(zhí)行的,而觸發(fā)器則是由某個(gè)動(dòng)作(如刪除或修改一條記錄)引發(fā)執(zhí)行的。另外,存儲過程可以不依附于表而單獨(dú)存在,而觸發(fā)器則必須依附于一個(gè)特定的表。它們與函數(shù)也不同,函數(shù)可以直接通過函數(shù)名返回?cái)?shù)值,其返回值可以直接在表達(dá)式中使用,而存儲過程與觸發(fā)器則不能直接通過其名稱帶回返回值,也不能直接在表達(dá)式中使用。

第9章存儲過程與觸發(fā)器

存儲過程與觸發(fā)器是SQLServer中的兩類數(shù)67

歸納分析:SQLServer的存儲過程分為三大類:

1.系統(tǒng)存儲過程系統(tǒng)存儲過程是SQLServer內(nèi)置的存儲過程,可以直接用于執(zhí)行一些操作,用于進(jìn)行系統(tǒng)管理、登錄管理、權(quán)限設(shè)置、數(shù)據(jù)庫對象管理、查看數(shù)據(jù)庫信息、數(shù)據(jù)庫復(fù)制等操作。系統(tǒng)存儲過程存放在master數(shù)據(jù)庫中,以sp_作為前綴。在任何數(shù)據(jù)庫中無需用master限定就直接執(zhí)行。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器68

歸納分析:如果是查看或修改已有存儲過程的定義,則右擊要查看或修改的存儲過程,在彈出的快捷菜單中,選擇“屬性”命令,則調(diào)出“存儲過程屬性”窗口,在這里可以查看或修改存儲過程的定義。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器69歸納分析:在SQLServer中,使用CREATEPROCEDURE語句創(chuàng)建一個(gè)永久或臨時(shí)存儲過程。

命令格式:

CREATEPROCEDURE存儲過程名[WITHENCRYPTION][WITHRECOMPILE]

ASSQL語句命令說明:(1)WITHENCRYPTION:對存儲過程進(jìn)行加密。(2)WITHRECOMPILE:對存儲過程重新編譯。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器70歸納分析:只有數(shù)據(jù)庫所有者和存儲過程的所有者才有權(quán)修改存儲過程名稱。不宜輕易修改存儲過程名稱,因?yàn)橄到y(tǒng)中許多應(yīng)用程序可能都要調(diào)用存儲過程,如果修改了存儲過程的名稱,則這些應(yīng)用程序都要隨之改動(dòng)。命令格式:

sp_rename原存儲過程名,新存儲過程名

修改存儲過程名稱的方法與修改表名稱的方法類同,讀者可以參照執(zhí)行。使用企業(yè)管理器修改存儲過程名稱的方法也類似于修改表名稱的方法,即展開指定的數(shù)據(jù)庫節(jié)點(diǎn),單擊存儲過程,在右邊的窗口中選中一個(gè)需要修改名稱的存儲過程右擊之,在彈出的快捷菜單中選擇“重命名”。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器719.6刪除存儲過程9.6.1使用企業(yè)管理器刪除存儲過程[實(shí)例9.9]使用企業(yè)管理器刪除存儲過程。

操作步驟:

第9章存儲過程與觸發(fā)器

9.6刪除存儲過程第9章存儲過程與觸發(fā)器72歸納分析:在SQLServer中,使用CREATEPROCEDURE語句創(chuàng)建一個(gè)永久或臨時(shí)存儲過程。

命令格式:

CREATEPROCEDURE存儲過程名[WITHENCRYPTION][WITHRECOMPILE]

ASSQL語句命令說明:(1)WITHENCRYPTION:對存儲過程進(jìn)行加密。(2)WITHRECOMPILE:對存儲過程重新編譯。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器739.7查看存儲過程9.7.1使用企業(yè)管理器查看存儲過程的信息[實(shí)例9.11]使用企業(yè)管理器查看存儲過程的信息。

操作步驟:在圖9.4所示屬性對話框中可以查詢存儲過程的名稱、所有者、建立時(shí)間和文本信息。在圖9.3所示窗口的右部選中一個(gè)存儲過程并右擊,在彈出的級聯(lián)菜單中依次選擇“所有任務(wù)”、“顯示相關(guān)性”,系統(tǒng)會(huì)彈出“顯示相關(guān)性”對話框,該對話框顯示一個(gè)存儲過程所引用的表及其列信息。

第9章存儲過程與觸發(fā)器

9.7查看存儲過程第9章存儲過程與觸發(fā)器74命令格式:

CREATEPROCEDURE存儲過程名@參數(shù)名數(shù)據(jù)類型[=默認(rèn)值][WITHENENCRYPTION][WITHRERECOMPILE]

ASSQL語句命令說明:“@參數(shù)名”和定義局部變量一樣,必須以符號@為前綴,要指定數(shù)據(jù)類型,多個(gè)參數(shù)定義要用逗號“,”隔開。在執(zhí)行存儲過程時(shí)該參數(shù)將由指定的參數(shù)值來代替,如果執(zhí)行時(shí)未提供該參數(shù)的參數(shù)值,則如果這里定義了默認(rèn)值則使用該值作為執(zhí)行時(shí)的參數(shù)值,默認(rèn)值可以是常量或空(NULL)。

第9章存儲過程與觸發(fā)器

命令格式:第9章存儲過程與觸發(fā)器75歸納分析:SQLServer2000中可以建立兩類觸發(fā)器,一類是在觸發(fā)后將執(zhí)行一組新的T-SQL語句用以代替引起觸發(fā)器執(zhí)行的語句(原有語句沒有執(zhí)行,僅執(zhí)行新語句),稱之為INSTEADOF觸發(fā)器:另一類是在引起觸發(fā)器執(zhí)行的語句執(zhí)行完畢后,再執(zhí)行觸發(fā)器中的語句,稱之為AFTER類觸發(fā)器。(1)INSTEADOF觸發(fā)器既可以在表上定義,也可以在視圖上定義。該類觸發(fā)器依據(jù)其觸發(fā)動(dòng)作(UPDATE、DELETE和INSERT)的不同分為INSTEADOFINSERT、INSTEADOFUPDATE和INSTEADOFDELETE三種,被引發(fā)執(zhí)行時(shí)將分別代替表或視圖的INSERT、UPDATE、DELETE操作,亦即表中的增刪改操作沒有進(jìn)行。每個(gè)觸發(fā)動(dòng)作僅可以定義一個(gè)INSTEADOF觸發(fā)器。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器769.8存儲過程編程9.8.1參數(shù)和變量[實(shí)例9.13]創(chuàng)建的存儲過程,修改成當(dāng)輸入學(xué)生學(xué)號時(shí)可以查詢某個(gè)學(xué)生的成績:不輸入學(xué)號時(shí),則查詢?nèi)繉W(xué)生的成績。

操作步驟:

第9章存儲過程與觸發(fā)器

9.8存儲過程編程第9章存儲過程與觸發(fā)器77

2.執(zhí)行帶參數(shù)的存儲過程在執(zhí)行存儲過程的語句中,有兩種方式來傳遞參數(shù)值,分別是使用參數(shù)名傳遞參數(shù)值和按參數(shù)位置傳遞參數(shù)值。使用參數(shù)名傳遞參數(shù)值,是通過語句“@參數(shù)名:參數(shù)值”給參數(shù)傳遞值。當(dāng)存儲過程含有多個(gè)輸入?yún)?shù)時(shí),參數(shù)值可以按任意順序制定,對于允許空值和具有默認(rèn)值的輸入?yún)?shù)可以不給出參數(shù)的傳遞值。執(zhí)行使用參數(shù)名傳遞參數(shù)值的存儲過程的命令格式:

EXECUTE存儲過程名[@參數(shù)名=參數(shù)值]按參數(shù)位置傳遞參數(shù)值,不顯式地給出“@參數(shù)名”,而是按照參數(shù)定義的順序給出參數(shù)值。按位置傳遞參數(shù)時(shí),也可以忽略允許空值和具有默認(rèn)值的參數(shù),但不能因此破壞輸入?yún)?shù)的指定順序。必要時(shí),使用關(guān)鍵字“DEFAULT”作為默認(rèn)值的占位。第9章存儲過程與觸發(fā)器

2.執(zhí)行帶參數(shù)的存儲過程第9章存儲過程與觸發(fā)器789.9.1使用企業(yè)管理器創(chuàng)建觸發(fā)器[實(shí)例9.15]在表學(xué)生成績中建立一個(gè)觸發(fā)器,當(dāng)向表中插入一條記錄時(shí),檢查該學(xué)生的學(xué)號是否存在于表學(xué)生信息中,如果存在,則插入;否則,打印“學(xué)號不存在”,并回滾事務(wù),使插入數(shù)據(jù)無效。

操作步驟:

第9章存儲過程與觸發(fā)器

9.9.1使用企業(yè)管理器創(chuàng)建觸發(fā)器第9章存儲過程與觸發(fā)器79(3)本例建立了一個(gè)AFIER觸發(fā)器(僅給出FOR表示默認(rèn)為AFTER型觸發(fā)器)用于DELETE操作,首先聲明一個(gè)局部變量用以存放Deleted表中數(shù)據(jù)行數(shù)。當(dāng)對學(xué)生信息表執(zhí)行刪除操作時(shí),檢查刪除的行數(shù)(Deleted表中數(shù)據(jù)行數(shù)),如果行數(shù)>1,則認(rèn)為操作錯(cuò)誤,打印提示信息并回滾事務(wù),使刪除無效。但是如果使用TRUNCATETABLE學(xué)生信息清除表中所有數(shù)據(jù),則觸發(fā)器不會(huì)觸發(fā),可以成功刪除全部數(shù)據(jù)。

第9章存儲過程與觸發(fā)器

(3)本例建立了一個(gè)AFIER觸發(fā)器(僅給出FOR表示默認(rèn)為80(4)[INSERT][,][UPDATE][,][DELETE]:指定在表或視圖上執(zhí)行哪些數(shù)據(jù)修改語句時(shí)將激活觸發(fā)器。必須至少指定一個(gè)選項(xiàng),如果指定的選項(xiàng)多于一個(gè),需用逗號分隔。(5)IFUPDATE(列名)[(AND|OR)UPDATE(列名)][..n]:判定某一列或幾列,是否被修改。如果希望僅當(dāng)某一列(或幾列)的數(shù)據(jù)發(fā)生變化才導(dǎo)致觸發(fā)器動(dòng)作,而其他列的數(shù)據(jù)變化不會(huì)引發(fā)觸發(fā)器執(zhí)行,則可以采用本選項(xiàng)。此時(shí)可以稱之為列級觸發(fā)器。第9章存儲過程與觸發(fā)器

(4)[INSERT][,][UPDATE][,][D819.12刪除觸發(fā)器[實(shí)例9.23]刪除不用的觸發(fā)器名。操作步驟:

第9章存儲過程與觸發(fā)器

9.12刪除觸發(fā)器第9章存儲過程與觸發(fā)器829.10觸發(fā)器介紹觸發(fā)器具有如下優(yōu)點(diǎn):(1)觸發(fā)器可以實(shí)現(xiàn)外鍵約束的功能,實(shí)現(xiàn)對表的級連修改。(2)觸發(fā)器可以實(shí)現(xiàn)核查約束的功能,而且其功能更為強(qiáng)大。它可以使用另一個(gè)表的內(nèi)容來約束觸發(fā)器所在表。(3)如果對表中數(shù)據(jù)進(jìn)行了增、刪、改的操作,使用觸發(fā)器可以根據(jù)修改前后的差異,采取相應(yīng)的對策。(4)允許在一個(gè)表中針對不同的增刪改操作設(shè)置多個(gè)觸發(fā)器,以完成各類不同任務(wù)。

第9章存儲過程與觸發(fā)器

9.10觸發(fā)器介紹第9章存儲過程與觸發(fā)器839.10.1觸發(fā)器執(zhí)行過程中的兩個(gè)表[實(shí)例9.17]觸發(fā)器執(zhí)行過程中的兩個(gè)表操作過程。

操作步驟:

觸發(fā)器是在表上建立的,我們將觸發(fā)器所依附的表稱為觸發(fā)器表。當(dāng)修改表的數(shù)據(jù)而引發(fā)了觸發(fā)器時(shí),觸發(fā)器將執(zhí)行一系列T-SQL命令,在執(zhí)行這些動(dòng)作之前系統(tǒng)首先自動(dòng)建立兩個(gè)表,Deleted表與Inserted表。這兩個(gè)表臨時(shí)駐留在內(nèi)存當(dāng)中,其結(jié)構(gòu)與觸發(fā)器表完全相同,一旦觸發(fā)器執(zhí)行完畢,兩個(gè)表也隨之消失??梢允褂肈eleted表與Inserted表測試某些數(shù)據(jù)修改的效果以及設(shè)置觸發(fā)器操作的條件,但不能直接修改這兩個(gè)表中的數(shù)據(jù)。

第9章存儲過程與觸發(fā)器

9.10.1觸發(fā)器執(zhí)行過程中的兩個(gè)表第9章存儲過程與觸84Deleted表存放由于執(zhí)行DELETE或UPDATE操作時(shí)從觸發(fā)器表(被刪除數(shù)據(jù)的表)中刪除的數(shù)據(jù)行,即觸發(fā)器表中需要?jiǎng)h除的數(shù)據(jù)將被移到Deleted表中。因此這兩個(gè)表沒有相同的數(shù)據(jù)行,如圖9.15所示。Inserted表用于存放執(zhí)行INSERT或UPDATE操作時(shí)向觸發(fā)器表(被插入數(shù)據(jù)的表)中插入的數(shù)據(jù)行,即新的數(shù)據(jù)行被同時(shí)插入到兩個(gè)表——觸發(fā)器表和Inserted表中,因此這兩個(gè)表有相同的數(shù)據(jù)行,如圖9.16所示。第9章存儲過程與觸發(fā)器

Deleted表存放由于執(zhí)行DELETE或UPD85UPDATE操作相當(dāng)于先執(zhí)行DELETE操作,然后再執(zhí)行INSERT操作,因此要用到Deleted與Inserted兩個(gè)表。

第9章存儲過程與觸發(fā)器

UPDATE操作相當(dāng)于先執(zhí)行DELETE操作,然869.10.2SQLServer2000的兩類觸發(fā)器[實(shí)例9.18]建立一個(gè)觸發(fā)器,防止用戶在要?jiǎng)h除表學(xué)生信息中的一條數(shù)據(jù)時(shí),由于沒有使用限制條件(誤用SELECT*FROM學(xué)生信息語句)而導(dǎo)致刪除全部數(shù)據(jù)的情況發(fā)生。

操作步驟:

第9章存儲過程與觸發(fā)器

9.10.2SQLServer2000的兩類觸發(fā)器第987(3)本例建立了一個(gè)AFIER觸發(fā)器(僅給出FOR表示默認(rèn)為AFTER型觸發(fā)器)用于DELETE操作,首先聲明一個(gè)局部變量用以存放Deleted表中數(shù)據(jù)行數(shù)。當(dāng)對學(xué)生信息表執(zhí)行刪除操作時(shí),檢查刪除的行數(shù)(Deleted表中數(shù)據(jù)行數(shù)),如果行數(shù)>1,則認(rèn)為操作錯(cuò)誤,打印提示信息并回滾事務(wù),使刪除無效。但是如果使用TRUNCATETABLE學(xué)生信息清除表中所有數(shù)據(jù),則觸發(fā)器不會(huì)觸發(fā),可以成功刪除全部數(shù)據(jù)。

第9章存儲過程與觸發(fā)器

(3)本例建立了一個(gè)AFIER觸發(fā)器(僅給出FOR表示默認(rèn)為88[實(shí)例9.19]在學(xué)生成績表上建立一個(gè)列級觸發(fā)器trigger_學(xué)生成績,僅當(dāng)修改班級時(shí),觸發(fā)器執(zhí)行,其他情況觸發(fā)器不執(zhí)行。操作步驟:

第9章存儲過程與觸發(fā)器

[實(shí)例9.19]在學(xué)生成績表上建立一個(gè)列級觸發(fā)器trigge89歸納分析:SQLServer2000中可以建立兩類觸發(fā)器,一類是在觸發(fā)后將執(zhí)行一組新的T-SQL語句用以代替引起觸發(fā)器執(zhí)行的語句(原有語句沒有執(zhí)行,僅執(zhí)行新語句),稱之為INSTEADOF觸發(fā)器:另一類是在引起觸發(fā)器執(zhí)行的語句執(zhí)行完畢后,再執(zhí)行觸發(fā)器中的語句,稱之為AFTER類觸發(fā)器。(1)INSTEADOF觸發(fā)器既可以在表上定義,也可以在視圖上定義。該類觸發(fā)器依據(jù)其觸發(fā)動(dòng)作(UPDATE、DELETE和INSERT)的不同分為INSTEADOFINSERT、INSTEADOFUPDATE和INSTEADOFDELETE三種,被引發(fā)執(zhí)行時(shí)將分別代替表或視圖的INSERT、UPDATE、DELETE操作,亦即表中的增刪改操作沒有進(jìn)行。每個(gè)觸發(fā)動(dòng)作僅可以定義一個(gè)INSTEADOF觸發(fā)器。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器90(2)AFTER觸發(fā)器只能在表上定義。該類觸發(fā)器分為AFTERINSERT、AFTERUPDATE和AFTERDELETE三種,被引發(fā)時(shí)將分別在表的INSERT、UPDATE、DELETE操作之后執(zhí)行,也就是說只有在表中數(shù)據(jù)的增刪改操作、外鍵約束和核查約束均成功完成后,才能執(zhí)行AFTER觸發(fā)器。每個(gè)觸發(fā)動(dòng)作可以定義多個(gè)AFTER觸發(fā)器,并可以指定這些觸發(fā)器的執(zhí)行順序。

第9章存儲過程與觸發(fā)器

(2)AFTER觸發(fā)器只能在表上定義。該類觸發(fā)器分為AFT919.11修改觸發(fā)器觸發(fā)器建立后可以對其進(jìn)行修改,既可以修改它的名稱,也可以修改它的定義。9.11.1修改觸發(fā)器名稱[實(shí)例9.20]將觸發(fā)器trigger_student改為tri_學(xué)生。

操作步驟:

第9章存儲過程與觸發(fā)器

9.11修改觸發(fā)器第9章存儲過程與觸發(fā)器92

(1)啟動(dòng)“查詢分析器”,輸入如下SQL語句:

sp_renametrigger_student,tri_學(xué)生(2)按“F5”鍵或單擊工具欄“執(zhí)行查詢”圖標(biāo)。

歸納分析:

命令格式:

sp_rename舊觸發(fā)器名,新觸發(fā)器名第9章存儲過程與觸發(fā)器

第9章存儲過程與觸發(fā)器939.11.2修改觸發(fā)器的定義

[實(shí)例9.21]在企業(yè)管理器中修改[實(shí)例9.17]將刪除表改為添加記錄。

操作步驟:(3)單擊檢查語法按鈕,進(jìn)行語法檢查,成功后,可插入數(shù)據(jù)檢驗(yàn)觸發(fā)器的效果。

第9章存儲過程與觸發(fā)器

9.11.2修改觸發(fā)器的定義第9章存儲過程與觸發(fā)器94歸納分析:

命令格式:

ALTERTRIGGERON{表|視圖}[WITHENCRYPTION]{FOR|AFTER|INSTEADOF}{[INSERT][,][UPDATE][,][DELETE]}[NOTFORREPLICATION]

AS[{IFUPDATE(列名)[(AND|OR)UPDATE(列名)][..n]}

SQL語句

命令說明:其中各項(xiàng)語法含義與創(chuàng)建觸發(fā)器相同。

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器959.11.3修改觸發(fā)器的有效性[實(shí)例9.22]在[實(shí)例9.18]中打算修改班級時(shí),可以先使觸發(fā)器失效,然后修改班級,修改完畢再使觸發(fā)器生效。

操作步驟:

第9章存儲過程與觸發(fā)器

9.11.3修改觸發(fā)器的有效性第9章存儲過程與觸發(fā)器96

歸納分析:對于暫時(shí)希望觸發(fā)器失效的情況而言,這項(xiàng)功能很有用。一旦需要恢復(fù)觸發(fā)器的功能,不必重新編寫,只要觸發(fā)器重新生效即可。命令格式:(1)表中觸發(fā)器無效的語法為:

ALTERTABLE表名DISABLETRIGGER觸發(fā)器名觸發(fā)器無效時(shí),相當(dāng)于表中沒有該觸發(fā)器。(2)使表中無效的觸發(fā)器重新生效的語法為:

ALTERTABLE表名ENABLETRIGGER觸發(fā)器名

第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器979.12刪除觸發(fā)器[實(shí)例9.23]刪除不用的觸發(fā)器名。操作步驟:

第9章存儲過程與觸發(fā)器

9.12刪除觸發(fā)器第9章存儲過程與觸發(fā)器98歸納分析:命令格式:

DROPTRIGGERtrigger_name[,…n)上述語句可以刪除多個(gè)觸發(fā)器,每個(gè)觸發(fā)器的名稱之間用逗號隔開。第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器999.13查詢觸發(fā)器信息[實(shí)例9.24]利用企業(yè)管理器查看查看本章建立的觸發(fā)器。操作步驟:

第9章存儲過程與觸發(fā)器

9.13查詢觸發(fā)器信息第9章存儲過程與觸發(fā)器100[實(shí)例9.25]利用系統(tǒng)存儲過程查看本章建立的觸發(fā)器。操作步驟:

第9章存儲過程與觸發(fā)器

[實(shí)例9.25]利用系統(tǒng)存儲過程查看本章建立的觸發(fā)器。第9101歸納分析:觸發(fā)器創(chuàng)建以后,可以使用系統(tǒng)存儲過程瀏覽觸發(fā)器的有關(guān)信息。(1)顯示觸發(fā)器對象的類型。創(chuàng)建時(shí)間、所有者信息。

sp_help觸發(fā)器名(2)顯示觸發(fā)器的定義文本。如果觸發(fā)器使用了加密(WITHENCRYPTION選項(xiàng)),則無法看到觸發(fā)器的代碼文本。

sp_helptext觸發(fā)器名第9章存儲過程與觸發(fā)器

歸納分析:第9章存儲過程與觸發(fā)器102(3)顯示表中觸發(fā)器的信息。其中type必須是INSERT、UPDATE、DELETE三者之一,且方括號[]不能去掉。如果省略“[type]”,則列出所有觸發(fā)器,否則,列出[type]指定類型的觸發(fā)器。

sp_helptrigger表名,[INSERT|UPDATE|DELETE](4)利用查詢語句從系統(tǒng)表中查詢所有觸發(fā)器的信息

SELECT*FROMSysobjectsWHEREtype=‘TR’(5)顯示表中觸發(fā)器的依賴關(guān)系,即觸發(fā)器是否引用其他對象或作用于哪一列。

sp_depends觸發(fā)器名

第9章存儲過程與觸發(fā)器

(3)顯示表中觸發(fā)器的信息。其中type必須是INSERT、1039.14本章總結(jié)1.

存儲過程與觸發(fā)器是SQLServer中的兩類數(shù)據(jù)庫對象。存儲過程是由用戶根據(jù)需要調(diào)用執(zhí)行的,存儲過程可以不依附于表而單獨(dú)存在。而觸發(fā)器則是由某個(gè)動(dòng)作(如刪除或修改一條記錄)引發(fā)執(zhí)行的,觸發(fā)器則必須依附于一個(gè)特定的表。2.存儲過程具有如下優(yōu)點(diǎn):簡化了用戶的操作、執(zhí)行時(shí)省去了編譯與優(yōu)化的時(shí)間,速度明顯加快、在分布式查詢中,大大減少網(wǎng)絡(luò)流量、通過適當(dāng)?shù)臋?quán)限設(shè)置,可以使系統(tǒng)的安全性得到更有效的保障。

第9章存儲過程與觸發(fā)器

9.14本章總結(jié)第9章存儲過程與觸發(fā)器1043.SQLServer的存儲過程分為三大類:(1)系統(tǒng)存儲過程,系統(tǒng)存儲過程存放在master數(shù)據(jù)庫中,以sp_作為前綴。在任何數(shù)據(jù)庫中無需用master限定就直接執(zhí)行。(2)臨時(shí)存儲過程是對用戶定義的存儲過程。以#、或##開頭的存儲過程。以#開頭的存儲過程是局部臨時(shí)存儲過程,它僅能由其創(chuàng)建者本人在創(chuàng)建完后立即調(diào)用。以##開頭的存儲過程是全局臨時(shí)存儲過程,它可以由創(chuàng)建者本人和其他用戶在創(chuàng)建完后共同調(diào)用。(3)擴(kuò)展存儲過程第9章存儲過程與觸發(fā)器

3.SQLServer的存儲過程分為三大類:第9章存1054.應(yīng)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程的操作。5.應(yīng)熟練掌握使用T-SQL語句創(chuàng)建、修改、刪除和查看存儲過程,及如何執(zhí)行存儲過程的操作。6.應(yīng)掌握使用T-SQL語句帶參數(shù)和變量創(chuàng)建和修改存儲過程,及如何執(zhí)行存儲過程。7.了解觸發(fā)器在對表中數(shù)據(jù)進(jìn)行增、刪、改(INSERT、UPDATE、DELETE)操作時(shí)被觸發(fā)而執(zhí)行。觸發(fā)器可以包含復(fù)雜的T-SQL語句。在觸發(fā)器內(nèi)設(shè)置回滾,可以將觸發(fā)它的語句所在的事務(wù)全部回滾,這樣檢測到錯(cuò)誤時(shí)可以回滾事務(wù)以撤銷錯(cuò)誤。8.觸發(fā)器的優(yōu)點(diǎn):(1)觸發(fā)器可以實(shí)現(xiàn)外鍵約束的功能,實(shí)現(xiàn)對表的級連修改。

第9章存儲過程與觸發(fā)器

4.應(yīng)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程106(2)觸發(fā)器可以實(shí)現(xiàn)核查約束的功能,而且其功能更為強(qiáng)大。它可以使用另一個(gè)表的內(nèi)容來約束觸發(fā)器所在表。(3)如果對表中數(shù)據(jù)進(jìn)行了增、刪、改的操作,使用觸發(fā)器可以根據(jù)修改前后的差異,采取相應(yīng)的對策。(4)允許在一個(gè)表中針對不同的增刪改操作設(shè)置多個(gè)觸發(fā)器,以完成各類不同任務(wù)。9.

了解觸發(fā)器執(zhí)行過程中的兩個(gè)表操作過程。10.應(yīng)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看觸發(fā)器的操作。11.應(yīng)熟練掌握使用T-SQL語句創(chuàng)建、修改、刪除和查看觸發(fā)器,及如何執(zhí)行觸發(fā)器的操作。第9章存儲過程與觸發(fā)器

(2)觸發(fā)器可以實(shí)現(xiàn)核查約束的功能,而且其功能更為強(qiáng)大。它可1079.15思考與實(shí)訓(xùn)

9.15.1思考1.

存儲過程與觸發(fā)器在SQLServer中的的作用是什么?2.存儲過程具有哪些優(yōu)點(diǎn)?3.SQLServer的存儲過程分為幾類?是什么?各自有何特點(diǎn)?4.創(chuàng)建存儲過程命令中的WITHENCRYPTION和WITHRECOMPILE有何不同?5.執(zhí)行存儲過程時(shí)應(yīng)注意的問題是什么?6.系統(tǒng)查看存儲過程有幾個(gè)命令?是什么?有何不同?7.舉例說明建立帶輸入?yún)?shù)的存儲過程的作用。第9章存儲過程與觸發(fā)器

9.15思考與實(shí)訓(xùn)第9章存儲過程與觸發(fā)器1088.舉例說明執(zhí)行帶參數(shù)的存儲過程的作用。9.什么是觸發(fā)器?觸發(fā)器執(zhí)行過程中的兩個(gè)表是如何操作的?10.創(chuàng)建觸發(fā)器之前要注意什么問題?11.觸發(fā)器具有哪些優(yōu)點(diǎn)?12.舉例說明觸發(fā)器的兩類觸發(fā)有何不同?13.存儲過程與觸發(fā)器的執(zhí)行有何區(qū)別?14.執(zhí)行DELETE、UPDATE、INSERT型觸發(fā)器時(shí)分別建立了什么樣的臨時(shí)表?15.INSTEADOF觸發(fā)器與AFTER觸發(fā)器在被觸發(fā)時(shí)執(zhí)行的動(dòng)作有什么不同?

第9章存儲過程與觸發(fā)器

8.舉例說明執(zhí)行帶參數(shù)的存儲過程的作用。第9章存儲過程1099.15.2實(shí)訓(xùn)1.實(shí)訓(xùn)目的(1)

熟練掌握用T-SQL語句存儲過程與觸發(fā)器所需的記錄。(2)

熟練掌握用T-SQL語句編寫的操作過程。(3)熟練掌握存儲過程與觸發(fā)器的表示方法。(4)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程與與觸發(fā)器的操作。(5)熟練掌握使用T-SQL語句創(chuàng)建、修改、刪除和查看存儲過程,及如何執(zhí)行存儲過程與與觸發(fā)器的操作。2.實(shí)訓(xùn)環(huán)境SQLServer2000的運(yùn)行、管理環(huán)境。

第9章存儲過程與觸發(fā)器

9.15.2實(shí)訓(xùn)第9章存儲過程與觸發(fā)器1103.實(shí)訓(xùn)內(nèi)容下列編程均在“學(xué)生”數(shù)據(jù)庫中完成。(1)在學(xué)生成績表基礎(chǔ)上建立一個(gè)存儲過程pro_score1,輸入學(xué)生學(xué)號時(shí)可以查詢某個(gè)學(xué)生的各次數(shù)學(xué)(課程號為1002)期中成績的總和(假設(shè)當(dāng)學(xué)生第一次考試沒有通過時(shí),可以進(jìn)行第二次考試),并用一個(gè)輸出參數(shù)@sum輸出。(2)創(chuàng)建兩個(gè)同名存儲過程分組proscore2,一個(gè)用于查詢期中成績,一個(gè)用于查詢期末成績。(3)執(zhí)行1題的存儲過程,輸入學(xué)生學(xué)號01001,查詢其各次期中(課程號為1002)考試成績的總和,并用一個(gè)輸出參數(shù)@sum輸出。(4)執(zhí)行例2題的存儲過程pro_score2,一個(gè)用于查詢期中成績,一個(gè)用于查詢期末成績。(5)利用上述系統(tǒng)存儲過程查詢pro_score1的信息。

第9章存儲過程與觸發(fā)器

3.實(shí)訓(xùn)內(nèi)容第9章存儲過程與觸發(fā)器111(6)建立一個(gè)觸發(fā)器,防止用戶在要?jiǎng)h除表學(xué)生信息中的一條數(shù)據(jù)時(shí),由于沒有使用限制條件(誤用SELECTFROM學(xué)生信息語句)而導(dǎo)致刪除全部數(shù)據(jù)的情況發(fā)生。(7)利用系統(tǒng)存儲過程查看本章建立的觸發(fā)器。4.實(shí)訓(xùn)要求(1)將實(shí)訓(xùn)3的內(nèi)容在SQLServer2000環(huán)境中調(diào)試成功,并將編寫的程序調(diào)試、運(yùn)行正確成功后,存入磁盤中。(2)每次實(shí)訓(xùn)后,總結(jié)一下實(shí)訓(xùn)的重點(diǎn)內(nèi)容和應(yīng)注意的問題,并寫成實(shí)訓(xùn)報(bào)告的形式上交。

第9章存儲過程與觸發(fā)器

(6)建立一個(gè)觸發(fā)器,防止用戶在要?jiǎng)h除表學(xué)生信息中的一條數(shù)據(jù)112第9章存儲過程與觸發(fā)器

完返回首頁第9章存儲過程與觸發(fā)器完返回首頁113學(xué)習(xí)目標(biāo):

通過本章學(xué)習(xí),你能夠?qū)W會(huì):1.了解存儲過程與觸發(fā)器的特性2.了解存儲過程與觸發(fā)器的優(yōu)點(diǎn)3.應(yīng)熟練掌握使用企業(yè)管理器創(chuàng)建、修改、刪除和查看存儲過程與與觸發(fā)器的操作。4.應(yīng)熟練掌握使用T-SQL語句創(chuàng)建、修改、刪除和查看存儲過程,及如何執(zhí)行存儲過程與與觸發(fā)器的操作。第9章存儲過程與觸發(fā)器

學(xué)習(xí)目標(biāo):第9章存儲過程與觸發(fā)器114存儲過程與觸發(fā)器是SQLServer中的兩類數(shù)據(jù)庫對象。它們都是由T-SQL語句編寫而成的過程,所不同的是存儲過程是由用戶根據(jù)需要調(diào)用執(zhí)行的,而觸發(fā)器則是由某個(gè)動(dòng)作(如刪除或修改一條記錄)引發(fā)執(zhí)行的。另外,存儲過程可以不依附于表而單獨(dú)存在,而觸發(fā)器則必須依附于一個(gè)特定的表。它們與函數(shù)也不同,函數(shù)可以直接通過函數(shù)名返回?cái)?shù)值,其返回值可以直接在表達(dá)式中使用,而存儲過程與觸發(fā)器則不能直接

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論