存儲過程與觸發(fā)器綜合概述_第1頁
存儲過程與觸發(fā)器綜合概述_第2頁
存儲過程與觸發(fā)器綜合概述_第3頁
存儲過程與觸發(fā)器綜合概述_第4頁
存儲過程與觸發(fā)器綜合概述_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章存儲過程與觸發(fā)器本章學(xué)習(xí)目標(biāo)l理解存儲過程和觸發(fā)器的作用l

熟練創(chuàng)建和管理存儲過程及觸發(fā)器l

靈活運用存儲過程和觸發(fā)器提高系統(tǒng)開發(fā)效率

8.1存儲過程

8.1.1存儲過程基礎(chǔ)知識

1.存儲過程簡介

存儲過程是存儲在服務(wù)器上的由SQL語句和控制流語句組成的一個預(yù)編譯集合。存儲過程劃分為系統(tǒng)存儲過程以及用戶存儲過程。一個存儲過程可以作為一個獨立的單元進(jìn)行處理。在SQLServer中可以通過存儲過程來完成很多管理任務(wù),利用一些常用的系統(tǒng)存儲過程可以很方便的查看、操作數(shù)據(jù)庫對象。系統(tǒng)存儲過程的命名通常以”sp_”作為前綴,并且存儲于Master數(shù)據(jù)庫中,如果用戶擁有足夠的權(quán)限,就可以在任何數(shù)據(jù)庫中調(diào)用這些存儲過程。

存儲過程提供了一種封裝某一個需要重復(fù)執(zhí)行任務(wù)的方法。一旦定義了一個存儲過程之后,在應(yīng)用程序中就可以對其進(jìn)行調(diào)用。在存儲過程中,不僅可以包含程序流、邏輯以及對數(shù)據(jù)庫的查詢,而且也可以接受參數(shù)、輸出參數(shù)、返回單個或多個結(jié)果集。所以通過設(shè)計自定義用戶存儲過程,用戶可以使其實現(xiàn)強大的編程功能。

使用存儲過程可以比單獨的SQL語句完成更為復(fù)雜的功能,并且系統(tǒng)會對存儲過程中的SQL語句進(jìn)行了預(yù)編譯處理,使得執(zhí)行速度有了大幅度的提升。存儲過程被第一次調(diào)用后,會保存在高速緩沖區(qū)中,這樣再次執(zhí)行同一個存儲過程時,會提高了重復(fù)調(diào)用的效率。在實際應(yīng)用中,可以將復(fù)雜的商業(yè)規(guī)則封裝在存儲過程中,從而提高程序語句的利用率。

2.存儲過程的優(yōu)點存儲過程一旦執(zhí)行一次后,其執(zhí)行的計劃就會駐留在計算機的高速緩沖存儲器中。其后對同一個存儲過程的調(diào)用就可以直接利用編譯后在高速緩存中的二進(jìn)制形式來完成操作??梢栽趩蝹€存儲過程中執(zhí)行一系列SQL語句,因而可以用于設(shè)計、封裝企業(yè)的功能模塊。應(yīng)用程序使用相同的存儲過程進(jìn)行操作,確保了在數(shù)據(jù)訪問、操縱的一致性??梢栽诋?dāng)前的存儲過程內(nèi)部引用其它存儲過程,這樣可以將復(fù)雜語句進(jìn)行簡化。提供了一種數(shù)據(jù)庫訪問的途徑,只需要用戶擁有執(zhí)行存儲過程的權(quán)限,那么通過使用存儲過程就可以完成對數(shù)據(jù)庫的各種操作,如添加數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)等,而不需要考慮用戶是否擁有存儲過程所處理的數(shù)據(jù)對象的訪問權(quán)限。3.使用存儲過程的注意事項在命名自定義存儲過程時避免與系統(tǒng)存儲過程名相同。存儲過程最多能夠支持32層的嵌套。命名存儲過程中的標(biāo)識符時,長度不能超過128個字符。存儲過程中參數(shù)的個數(shù)不能超過2100。8.1.2創(chuàng)建和執(zhí)行存儲過程

在SQLServer中,既可以通過企業(yè)管理器,也可以通過使用CREATEPROCEDRUE語句的方式來創(chuàng)建存儲過程。

1.使用企業(yè)管理器創(chuàng)建存儲過程

步驟:

①在企業(yè)管理器中,展開服務(wù)器組、服務(wù)器節(jié)點、數(shù)據(jù)庫節(jié)點。

②選擇某一個數(shù)據(jù)庫并在該節(jié)點上點擊鼠標(biāo)右鍵,選擇【新建】菜單下的【存儲過程】級聯(lián)菜單,將彈出如圖8-1所示的對話框。圖8-1新建存儲過程對話框③在【存儲過程屬性】對話框中的【文本】編輯框中,對[OWNER]以及[PROCEDURENAME]部分進(jìn)行修改,分別修改為該存儲過程的所有者和存儲過程名稱,并且輸入該存儲過程所包含的SQL語句。如圖8-2所示為創(chuàng)建了一個用于查詢學(xué)生信息的存儲過程。圖8-2用于查詢學(xué)生信息的存儲過程④如果需要驗證存儲過程中的SQL語句的正確性,可以單擊【檢查語法】按鈕,如果沒有語法錯誤則會彈出如圖8-3所示的“語法檢查成功”的對話框。圖8-3“語法檢查成功”的提示對話框⑤當(dāng)存儲過程中沒有語法錯誤后,可以單擊【確定】按鈕來保存自定義的存儲過程。2.使用CREATEPROCEDURE語句來創(chuàng)建存儲過程

該語句可以創(chuàng)建永久使用的存儲過程,也可以創(chuàng)建局部臨時過程、全局臨時過程。

語法格式為:

CREATEPROCEDURE存儲過程名稱[;數(shù)值]

[{@參數(shù)數(shù)據(jù)類型}

[VARYING][=參數(shù)的默認(rèn)值][OUTPUT][,…n]

[WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]

[FORREPLICATION]

ASSQL語句[...n]]其中:存儲過程名稱必須符合標(biāo)識符命名規(guī)則,而且對于數(shù)據(jù)庫以及所有者命名必須唯一。一個完整的命名不能超過128個字符?!纠?-1】使用CREATEPROCEDURE語句創(chuàng)建一個名稱為proc_bjrs的存儲過程,用于檢索現(xiàn)有班級及人數(shù)。

CREATEPROCEDUREproc_bjrsAS

SELECTDISTINCT(班級表.班級編號),班級表.班級名稱,人數(shù)=COUNT(學(xué)生基本信息表.學(xué)號)

FROM學(xué)生基本信息表,班級表

WHERE班級表.班級編號=學(xué)生基本信息表.班級編號

GROUPBY班級表.班級編號,班級表.班級名稱

GO

在查詢分析器中執(zhí)行以上命令后,然后執(zhí)行該存儲過程EXECUTEproc_bjrs,運行結(jié)果如圖8-4所示。圖8-4檢檢索現(xiàn)有班班級以及人數(shù)數(shù)【例8-2】設(shè)計一個帶帶有參數(shù)的存存儲過程,該該參數(shù)用于傳傳遞班級編號號,根據(jù)該參參數(shù)在學(xué)生基基本信息表中中檢索出某一一個班級中所所有學(xué)生的信信息。CREATEPROCEDUREproc_bjcx@bjbhVARCHAR(8)ASSELECT*FROM學(xué)生基本本信息表WHERE班班級編號=@bjbh

GO其其中參數(shù)@bjbh用于于接收班級編編號,在實際際調(diào)用中根據(jù)據(jù)該參數(shù)將會會返回一個結(jié)結(jié)果集。例如如,EXECUTEproc_bjcx'20051003',將會顯示示班級編號為為20051003的學(xué)學(xué)生信息。運運行結(jié)果如圖圖8-5所示示圖8-5用用于傳遞班班級編號的存存儲過程修修改與刪刪除存儲過程程在SQLServer中,可以通通過企業(yè)管理理器或SQL語句兩種方方式修改或刪刪除存儲過程程。1.使用企業(yè)業(yè)管理器修改改存儲過程①在企業(yè)管理理器中,展開開服務(wù)器組、、服務(wù)器以及及數(shù)據(jù)庫節(jié)點點。

②選擇擇某一個數(shù)據(jù)據(jù)庫,展開該該數(shù)據(jù)庫節(jié)點點后點擊【存存儲過程】,,在右側(cè)的窗窗口中將會顯顯示出存儲過過程的列表。。右擊需要修修改的存儲過過程,在彈出出菜單中選擇擇【屬性】,,彈出存儲過過程屬性對話話框,如圖8-6所示。。圖8-6【【存儲過程程屬性】對話話框③在【存儲過過程屬性】對對話框的【文文本】編輯框框中修改包含含的SQL語語句。需要注注意的是,存存儲過程的名名稱不能修改改。

④在檢檢查了語法的的正確性之后后,可以單擊擊【確定】按按鈕保存修改改并關(guān)閉對話話框。2.使用企業(yè)業(yè)管理器重命命名存儲過程程①在企業(yè)管理理器中,展開開服務(wù)器組、、服務(wù)器以及及數(shù)據(jù)庫節(jié)點點。

②選擇擇某一個數(shù)據(jù)據(jù)庫,展開該該數(shù)據(jù)庫節(jié)點點后點擊【存存儲過程】,,在右側(cè)的窗窗口中將會顯顯示出存儲過過程的列表。。右擊需要重重命名的存儲儲過程,并選選擇彈出菜單單中的【重命命名】命令,,如圖8-7所示。圖8-7彈彈出菜單中中的【重命名名】命令③重新輸入存存儲過程的名名稱后,按下下回車鍵完成成修改。3.使用ALTERPROCEDURE語句句修改存儲過過程ALTERPROCEDURE語語句可以對數(shù)數(shù)據(jù)庫中已有有的存儲過程程進(jìn)行修該,,但不會更改改權(quán)限,也不不影響相關(guān)的的存儲過程或或觸發(fā)器。該該語句的語法法格式為:ALTERPROCEDURE存儲過過程名稱[;數(shù)值][{@參數(shù)數(shù)數(shù)據(jù)類型型}[VARYING][=參數(shù)的的默認(rèn)值][OUTPUT][,…n][WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}][FORREPLICATION]ASSQL語句[...n]]

其中中,存儲過程程名稱為數(shù)據(jù)據(jù)庫中已經(jīng)存存在的過程名名,語法中的的常用選項與與CREATEPROCEDURE語句一致致。【例8-3】修改已經(jīng)創(chuàng)創(chuàng)建的存儲過過程proc_bjcx及其功能,,將其修改為為可以根據(jù)系系部編號來查查詢某一個系系部中所有學(xué)學(xué)生的信息。。修改后將存存儲過程名稱稱重命名為proc_xbcx。在在查詢分析析器中運行如如下命令,即即可完成重命命名:

ALTERPROCEDUREproc_bjcx@xbbhVARCHAR(2)

ASSELECT*FROM學(xué)學(xué)生基本信息息表WHERE班級編編號IN(SELECT班級編編號FROM班級表表WHERE系部編編號=@xbbh)GOSP_RENAME'proc_bjcx','proc_xbcx'

GO使用SP_RENAME可以重新命命名一個現(xiàn)有有的存儲過程程。SP_RENAME的語法格式式為:

SP_RENAME原原名稱,新新名稱。完完成修改后后查詢系部編編號為’01’的學(xué)生信信息。

EXECproc_xbcx'01'4.使用企業(yè)業(yè)管理器刪除除存儲過程①在企業(yè)管理理器中,展開開服務(wù)器組、、服務(wù)器以及及數(shù)據(jù)庫節(jié)點點。

②選擇擇某一個數(shù)據(jù)據(jù)庫,展開該該數(shù)據(jù)庫后點點擊【存儲過過程】,在右右側(cè)的窗口中中顯示出存儲儲過程的列表表。右擊需要要刪除的存儲儲過程,并在在彈出菜單中中選擇【刪除除】命令,將將彈出【除去去對象】對話話框,如圖8-8所示。。

③在【除除去對象】對對話框中單擊擊【全部除去去】按鈕將會會完成對存儲儲過程的刪除除操作。圖8-8【【除去對象象】對話框5.使用DROPPROCEDURE語句刪刪除存儲過程程使用DROPPROCEDURE語句可以從從當(dāng)前的數(shù)據(jù)據(jù)庫中刪除一一個或多個存存儲過程。DROPPROCEDURE語句句的語法格式式為:

DROPPROCEDURE{存存儲過程名名稱}[,...n]

【例8-4】同時刪刪除當(dāng)前數(shù)據(jù)據(jù)庫中的兩個個存儲過程,,proc_a和proc_b。在在查詢分析析器中運行如如下命令,即即可完成刪除除操作:DROPPROCEDUREproc_a,proc_bGO8.2觸觸發(fā)器觸觸發(fā)器及及其作用1.觸發(fā)器簡簡介觸發(fā)器屬于一一種特殊的存存儲過程,可可以在其中包包含復(fù)雜的SQL語句。。觸發(fā)器與存存儲過程的區(qū)區(qū)別在于觸發(fā)發(fā)器能夠自動動執(zhí)行并且不不含有參數(shù)。。通??梢栽谠谟|發(fā)器內(nèi)編編寫一段自動動執(zhí)行的程序序,用于保證證數(shù)據(jù)操作的的完整性,從從而擴展了對對默認(rèn)值、約約束和規(guī)則的的完整性檢查查。對表進(jìn)行行包括添加數(shù)數(shù)據(jù)、刪除數(shù)數(shù)據(jù)、更新數(shù)數(shù)據(jù)中的一種種或多種操作作時,觸發(fā)器器就會自動執(zhí)執(zhí)行。觸觸發(fā)器可可以劃分為三三種類別:INSERT觸發(fā)器、DELETE觸發(fā)器、UPDATE觸發(fā)器。這這三種觸發(fā)器器分別在發(fā)生生數(shù)據(jù)的添加加、刪除、修修改行為時自自動執(zhí)行。2.觸發(fā)器的的優(yōu)點觸發(fā)器有助于于在添加、更更新或刪除表表中的記錄時時保留表之間間已定義的關(guān)關(guān)系。觸發(fā)器可以自自動調(diào)用,當(dāng)當(dāng)發(fā)生了對數(shù)數(shù)據(jù)所作的任任何修改時,,與之相關(guān)的的觸發(fā)器就會會立刻被激活活??梢酝瓿蓴?shù)據(jù)據(jù)庫中相關(guān)表表之間的級聯(lián)聯(lián)修改。級聯(lián)聯(lián)修改是指為為了保證數(shù)據(jù)據(jù)之間的邏輯輯性以及依賴賴關(guān)系,在對對一張表進(jìn)行行修改的同時時,其他表中中需要進(jìn)行的的修改能夠自自動實現(xiàn)。觸發(fā)器可以對對需要存儲的的數(shù)據(jù)加以限限制,并且能能夠?qū)崿F(xiàn)比CHECK約約束更為復(fù)雜雜的功能。在在CHECK約束中不允允許引用其他他表中的列,,而觸發(fā)器可可以引用。3.觸發(fā)方式式觸發(fā)器的觸發(fā)發(fā)方式可以分分為后觸發(fā)和和替代觸發(fā)兩兩種方式。后后觸發(fā):指指能夠引發(fā)觸觸發(fā)器的修改改操作在完成成之后才執(zhí)行行觸發(fā)器的行行為方式。創(chuàng)創(chuàng)建該類觸發(fā)發(fā)器,需要使使用AFTER關(guān)鍵字或或者FOR關(guān)關(guān)鍵字。替代觸發(fā):指指定執(zhí)行一個個觸發(fā)器,而而不是執(zhí)行SQL語句,,這種替代觸觸發(fā)語句的方方式稱為替代代觸發(fā)方式。。創(chuàng)創(chuàng)建觸發(fā)發(fā)器可以使用企業(yè)業(yè)管理器以及及CREATETRIGGER語語句兩種方式式來創(chuàng)建觸發(fā)發(fā)器。1.使用企業(yè)業(yè)管理器創(chuàng)建建觸發(fā)器①打開企業(yè)管管理器,在控控制臺根目錄錄下依次展開開服務(wù)器組、、服務(wù)器節(jié)點點、數(shù)據(jù)庫節(jié)節(jié)點。

②選選擇某一個數(shù)數(shù)據(jù)庫,并雙雙擊【表】節(jié)節(jié)點,在右側(cè)側(cè)窗口的列表表中選擇其中中的一張表。。

③右擊所所選中的表,,在彈出的下下拉菜單中選選擇【所有任任務(wù)】,并繼繼續(xù)選擇級聯(lián)聯(lián)菜單中的【【管理觸發(fā)器器】命令,將將打開圖8-9所示的【【觸發(fā)器屬性性】對話框。。圖8-9【【觸發(fā)器屬屬性】對話框框④在【觸發(fā)器器屬性】對話話框的文本框框中,將[TRIGGERNAME]修改為為新建觸發(fā)器器的名稱,并并輸入觸發(fā)器器所包含的SQL語句。。

⑤通過點點擊【檢查語語法】按鈕來來判斷觸發(fā)器器的語法是否否正確,最后后,點擊【確確定】按鈕保保存新建的觸觸發(fā)器。2.使用CREATETRIGGER語句創(chuàng)創(chuàng)建觸發(fā)器CREATETRIGGER語句句的部分語法法格式:CREATETRIGGER觸觸發(fā)器名稱ON{表表名|視視圖名}

[WITHENCRYPTION]FOR|AFTER|INSTEADOF[DELETE][,][INSERT][,][UPDATE]

ASSQL語句[...n]其中:觸發(fā)器名稱必必須符合合標(biāo)識符命名名規(guī)則,并且且在同一個數(shù)數(shù)據(jù)庫中觸發(fā)發(fā)器的名稱不不允許重復(fù)。。觸發(fā)器名稱稱中可以省略略所有者名稱稱。表名或視圖名名稱是指指建立觸發(fā)器器所依賴的對對象。也可以以稱為觸發(fā)器器表或觸發(fā)器器視圖。WITHENCRYPTION該該選項的的作用為對觸觸發(fā)器中所包包含的SQL語句進(jìn)行加加密。FOR或AFTER代代表后觸發(fā)發(fā)方式,即當(dāng)當(dāng)滿足所有的的引用級聯(lián)操操作和約束檢檢查后并且完完成了SQL語句中指指定的所有操操作后,指定定的觸發(fā)器才才會被執(zhí)行。。在視圖上不不允許采用后后觸發(fā)方式。。INSTEADOF表表示替代代觸發(fā)方式,,每一個INSERT、、UPDATE、DELETE語語句只能定義義一個INSTEADOF觸觸發(fā)器。DELETE、INSERT、UPDATE三三個選項項中應(yīng)該至少少選擇其一,,用于表示在在表或視圖上上執(zhí)行了哪一一類的操作時時會將觸發(fā)器器激活。SQL語句為為觸發(fā)器器中包含的條條件以及需要要執(zhí)行的操作作。在執(zhí)行觸發(fā)器器時,系統(tǒng)會會自動創(chuàng)建兩兩張臨時表INSERTED、DELETED,這兩張表表的結(jié)構(gòu)與觸觸發(fā)器所依賴賴的表類似,,用于保存在在用戶操作過過程中被插入入或被刪除的的數(shù)據(jù)。每一一個觸發(fā)器在在執(zhí)行過程中中都會產(chǎn)生與與之相關(guān)的上上述兩張臨時時表,并且在在執(zhí)行結(jié)束后后,兩個臨時時表會自動被被系統(tǒng)刪除。。對臨時表可可以進(jìn)行查詢詢操作,如SELECT*FROMDELETED,但是不能能對臨時表進(jìn)進(jìn)行修改【例8-5】在數(shù)據(jù)庫XSCJ中設(shè)設(shè)計一個觸發(fā)發(fā)器,該觸發(fā)發(fā)器的作用為為:當(dāng)在班級級表中刪除某某一個班級時時,在學(xué)生基基本信息表中中該班級所包包含的學(xué)生信信息也全部被被刪除。提提示:在此例例中,由于涉涉及到了班級級表的刪除操操作,因而需需要設(shè)計一個個DELETE類型的觸觸發(fā)器。在在查詢分析器器中運行如下下命令:USEXSCJ

GO

CREATETRIGGERdel_bjON班級表AFTERDELETE

ASDELETEFROM學(xué)生基本本信息表WHERE班班級編號IN(SELECT班班級編號FROMDELETED)

GO

運行結(jié)果果如圖8-10所示。圖8-10一一個DELETE類類型的觸發(fā)器器【例8-6】在數(shù)據(jù)庫XSCJ中設(shè)設(shè)計一個觸發(fā)發(fā)器,該觸發(fā)發(fā)器能夠保證證在學(xué)生基本本信息表中添添加新的紀(jì)錄錄時,新學(xué)生生的班級編號號必須已經(jīng)存存在于班級表表中。提示:設(shè)計計該觸發(fā)器器有助于實實現(xiàn)學(xué)生信信息的完整整性。在此此例中由于于涉及到了了學(xué)生基本本信息表中中的添加操操作,因而而需要設(shè)計計一個INSERT類型的觸觸發(fā)器。在在查詢分分析器中運運行如下命命令:USEXSCJGOCREATETRIGGERinsert_xsON學(xué)學(xué)生基本信信息表AFTERINSERTASIFEXISTS(SELECT*FROMINSERTEDWHERE班級級編號IN(SELECT班級級編號FROM班班級表))PRINT'添加成功功!'ELSEBEGINPRINT'班級級編號與現(xiàn)現(xiàn)有的班級級不符!'ROLLBACKTRANSACTIONEND運行結(jié)果如如圖8-11所示。。圖8-11一個個INSERT類型型的觸發(fā)器器創(chuàng)建了觸發(fā)發(fā)器insert_xs之后后,我們可可以添加新新的學(xué)生紀(jì)紀(jì)錄進(jìn)行測測試,例如如:

INSERTINTO學(xué)生生基本信息息表(學(xué)學(xué)號,姓名名,性別,族別,班班級編號)VALUES('000108','王松松濤','男','漢','20081001')由由于“班級級表”中不不存在編號號為20081001的班級級,因而添添加操作將將會被取消消。ROLLBACKTRANSACTION用于回回滾已經(jīng)完完成的操作作。運行結(jié)結(jié)果如圖8-12所所示。圖8-12添加加操作被取取消8.2.4修改改與刪除觸觸發(fā)器1.使用企企業(yè)管理器器修改觸發(fā)發(fā)器①在控制臺臺根目錄下下依次展開開服務(wù)器組組、服務(wù)器器節(jié)點、數(shù)數(shù)據(jù)庫節(jié)點點。

②選選擇某一個個數(shù)據(jù)庫,,并雙擊【【表】節(jié)點點,在右側(cè)側(cè)窗口的列列表中選擇擇某一張需需要對其所所建立的觸觸發(fā)器進(jìn)行行修該的表表。

③右右擊所選中中的表,在在彈出的下下拉菜單中中選擇【所所有任務(wù)】】,并繼續(xù)續(xù)選擇級聯(lián)聯(lián)菜單中的的【管理觸觸發(fā)器】命命令,將打打開【觸發(fā)發(fā)器】屬性性對話框,,如圖8-13所示示。

④在在【觸發(fā)器器屬性】對對話框中,,在【名稱稱】下拉列列表框選擇擇一個已有有的觸發(fā)器器,并在【【文本】編編輯框中對對其所包含含的SQL語句進(jìn)行行修改。圖8-13【觸發(fā)發(fā)器】屬性性對話框⑤在語法檢檢查無誤的的情況下,,點擊【確確定】按鈕鈕保存修改改。

⑥如如果需要刪刪除當(dāng)前觸觸發(fā)器,可可以點擊【【刪除】按按鈕。2.使用ALTERTRIGGER語句修改改觸發(fā)器ALTERTRIGGER語句與與CREATETRIGGER語句句的語法格格式及其參參數(shù)類似,,部分語法法格式為::

ALTERTRIGGER觸觸發(fā)器名稱稱ON{表表名|視圖名名}

[WITHENCRYPTION]FOR|AFTER|INSTEADOF[DELETE][,][INSERT][,][UPDATE]

ASSQL語語句[...n]【例8-7】修改del_bj觸發(fā)器,,使得在班班級表中刪刪除某一個個班級時,,不僅在學(xué)學(xué)生基本信信息表中該該班級所包包含的學(xué)生生信息將被被刪除,而而且在成績績表中與學(xué)學(xué)生相關(guān)的的數(shù)據(jù)也將將被刪除。。

在查詢詢分析器中中運行如下下命令:ALTERTRIGGERdel_bjON班班級表AFTERDELETE

ASDELETEFROM成成績表WHERE學(xué)號IN(SELECT學(xué)號號FROM學(xué)生生基本信息息表WHERE班班級編號號IN(SELECT班級級編號FROMDELETED))DELETEFROM學(xué)生基基本信息表表WHERE班班級編號IN(SELECT班級級編號FROMDELETED)

運行結(jié)結(jié)果如圖8-14所所示。圖8-14修修改del_bj觸觸發(fā)器3.使用DROPTRIGGER語語句刪除觸觸發(fā)器移除觸發(fā)器器時,與觸觸發(fā)器有關(guān)關(guān)的信息將將從sysobjects和和syscomments系系統(tǒng)表中刪刪除。可以以通過刪除除觸發(fā)器或或刪除表兩兩種方式移移除觸發(fā)器器。刪除表表時,將除除去所有與與表相關(guān)聯(lián)聯(lián)的觸發(fā)器器。DROPTRIGGER語語句的語法法格式為::

DROPTRIGGER觸發(fā)發(fā)器名稱[,...n]

觸發(fā)器器名稱為數(shù)數(shù)據(jù)庫中現(xiàn)現(xiàn)有的觸發(fā)發(fā)器??梢砸灾付ㄒ粋€個或多個觸觸發(fā)器名稱稱來刪除一一個或多個個觸發(fā)器。?!纠?-8】刪除觸觸發(fā)器del_bj以及insert_xs。。

在查詢詢分析器中中運行如下下命令:USEXSCJ

GODROPTRIGGERdel_bj,insert_xs

運行結(jié)結(jié)果如圖8-15所所示。圖8-15刪除除觸發(fā)器del_bj以及insert_xs本章小結(jié)本章學(xué)習(xí)了了存儲過程程與觸發(fā)器器的相關(guān)知知識,存儲儲過程中可可以將多條條SQL語語句集中在在一起完成成復(fù)雜的功功能,從而而用戶可以以在不具有有對數(shù)據(jù)對對象訪問的的權(quán)限下調(diào)調(diào)用這些存存儲過程完完成的特定定的操作。。觸發(fā)器可可以幫助用用戶完成數(shù)數(shù)據(jù)的驗證證功能,從從而能夠保保證數(shù)據(jù)的的一致性、、完整性。。練習(xí)與上機機一.選擇題題1.下面關(guān)關(guān)于存儲過過程的描述述中哪些是是正確的(()A.自定義義存儲過程程與系統(tǒng)存存儲過程名名稱可以相相同

B..存儲過程程最多能夠夠支持64層的嵌套套

C.命命名存儲過過程中的標(biāo)標(biāo)識符時,,長度不能能超過256個字符符

D.存存儲過程中中參數(shù)的個個數(shù)不能超超過2100

2..用于創(chuàng)建建存儲過程程的SQL語句為(()A.CREATEDATABASEB.CREATETRIGGER

C..CREATEPROCEDURED.CREATETABLE3.用于修修改存儲過過程的SQL語句為為()A.ALTERTABLEB.ALTERDATABASEC.ALTERTRIGGERD.ALTERPROCEDURE4.下列對對觸發(fā)器的的描述中哪哪一個是錯錯誤的())

A..觸發(fā)器屬屬于一種特特殊的存儲儲過程B.觸發(fā)器器與存儲過過程的區(qū)別別在于觸發(fā)發(fā)器能夠自自動執(zhí)行并并且不含有有參數(shù)C.觸發(fā)器器有助于在在添加、更更新或刪除除表中的記記錄時保留留表之間已已定義的關(guān)關(guān)系

D..既可以對對INSERTED、DELETED臨時表進(jìn)進(jìn)行查詢,,也可以進(jìn)進(jìn)行修改二.填空題題1.一個存存儲過程的的名稱不能能超過_______個字符符。

2..使用_______語句可可以對存儲儲過程進(jìn)行行重命名。。

3.觸觸發(fā)器有_______、_______觸發(fā)發(fā)方式。4.用_________語句可以以刪除觸發(fā)發(fā)器。5.觸發(fā)器器可以劃分分為三種類類別____________、____________、____________。。三.簡答題題1.簡述什什么是存儲儲過程?2.簡要要說明存儲儲過程的語語法格式??

3.簡簡述什么是是觸發(fā)器??

4.簡簡要說明觸觸發(fā)器的語語法格式??項目實訓(xùn)1.創(chuàng)建一一個存儲過過程,該存存儲過程能能夠?qū)崿F(xiàn)根根據(jù)系部的的編號查詢詢出系部中中男生、女女生的人數(shù)數(shù)。

2..創(chuàng)建一個個INSERT觸發(fā)發(fā)器,該觸觸發(fā)器能夠夠在向成績績表中添加加數(shù)據(jù)時,,自動判斷斷學(xué)號、課課程編號、、成績是否否合法,如如果非法則則對插入操操作進(jìn)行回回滾。3.修改存存儲過程的的名字。4.建立立一個存儲儲過程,來來修改student數(shù)據(jù)庫庫的c、sc兩張表表,當(dāng)用戶戶修改c表表中的cno后,修修改cno表中對應(yīng)應(yīng)的數(shù)據(jù)。。9、靜夜四無鄰鄰,荒居舊業(yè)業(yè)貧。。12月-2212月-22Friday,December23,202210、雨中黃葉葉樹,燈下下白頭人。。。23:43:2423:43:2423:4312/23/202211:43:24PM11、以我獨沈沈久,愧君君相見頻。。。12月-2223:43:2423:43Dec-2223-Dec-2212、故故人人江江海海別別,,幾幾度度隔隔山山川川。。。。23:43:2423:43:2423:43Friday,December23,202213、乍乍見見翻翻疑疑夢夢,,相相悲悲各各問問年年。。。。12月月-2212月月-2223:43:2423:43:24December23,202214、他鄉(xiāng)鄉(xiāng)生白白發(fā),,舊國國見青青山。。。23十十二二月202211:43:24下下午午23:43:2412月月-2215、比不不了得得就不不比,,得不不到的的就不不要。。。。十二月月2211:43下下午12月月-2223:43December23,202216、行動出出成果,,工作出出財富。。。2022/12/2323:43:2423:43:2423December202217、做前,能夠夠環(huán)視四周;;做時,你只只能或者最好好沿著以腳為為起點的射線線向前。。11:43:24下午午11:43下下午23:43:2412月-229、沒有有失敗敗,只只有暫暫時停停止成成功??!。12月月-2212月月-22Friday,December23,202210、很多多事情情努力力了未未必有有結(jié)果果,但但是不不努力力卻什什么改改變也也沒有有。。。23:43:2423:43:2423:4312/23/202211:43:24PM11、成功就是是日復(fù)一日日那一點點點小小努力力的積累。。。12月-2223:43:2423:43Dec-2223-Dec-2212、世間成事事,不求其其絕對圓滿

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論