數(shù)據(jù)庫原理及應(yīng)用(第3版)課件:存儲(chǔ)過程與觸發(fā)器_第1頁
數(shù)據(jù)庫原理及應(yīng)用(第3版)課件:存儲(chǔ)過程與觸發(fā)器_第2頁
數(shù)據(jù)庫原理及應(yīng)用(第3版)課件:存儲(chǔ)過程與觸發(fā)器_第3頁
數(shù)據(jù)庫原理及應(yīng)用(第3版)課件:存儲(chǔ)過程與觸發(fā)器_第4頁
數(shù)據(jù)庫原理及應(yīng)用(第3版)課件:存儲(chǔ)過程與觸發(fā)器_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

存儲(chǔ)過程及觸發(fā)器數(shù)據(jù)庫原理及應(yīng)用基于SQLServer2022(第3版)存儲(chǔ)過程及觸發(fā)器本

錄6.1存儲(chǔ)過程概述6.2存儲(chǔ)過程常用操作 6.3觸發(fā)器的應(yīng)用6.4實(shí)驗(yàn)6存儲(chǔ)過程及觸發(fā)器6.5本章小結(jié)

教學(xué)目標(biāo)●理解存儲(chǔ)過程的基本概念及創(chuàng)建方法●熟悉管理存儲(chǔ)過程的常用方法●理解并掌握觸發(fā)器的基本概念●熟悉管理觸發(fā)器的具體應(yīng)用方法重點(diǎn)重點(diǎn)存儲(chǔ)過程及觸發(fā)器6.1存儲(chǔ)過程概述

在學(xué)生管理系統(tǒng)中,需要提供對(duì)學(xué)生成績進(jìn)行查詢的功能,T-SQL語句中的SELECT子句可以實(shí)現(xiàn)這一功能,但并不是所有的人都會(huì)使用SELECT查詢。要解決這個(gè)問題,可以把要執(zhí)行的T-SQL語句做成一個(gè)相對(duì)固定的語句組,根據(jù)SQLServer2022中所提供的存儲(chǔ)過程的特點(diǎn),在數(shù)據(jù)庫服務(wù)器端創(chuàng)建一個(gè)存儲(chǔ)過程,調(diào)用存儲(chǔ)過程去實(shí)現(xiàn)查詢并返回查詢結(jié)果。這樣就降低了用戶的操作難度,同時(shí)也減少了網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量,提高了系統(tǒng)性能。并且在多次查詢時(shí),直接調(diào)用存儲(chǔ)過程的編譯結(jié)果,可以使查詢的速度更快。案例6-1

6.1.1存儲(chǔ)過程的概念

存儲(chǔ)過程是數(shù)據(jù)庫中的一個(gè)功能,是一組為了完成特定功能、可以接收和返回用戶參數(shù)的T-SQL語句預(yù)編譯集合,經(jīng)過編譯后存儲(chǔ)在數(shù)據(jù)庫中,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理。存儲(chǔ)過程存儲(chǔ)在數(shù)據(jù)庫內(nèi),可由應(yīng)用程序通過一個(gè)調(diào)用執(zhí)行,而且允許用戶聲明變量、帶參數(shù)執(zhí)行以及其他強(qiáng)大的編程功能。存儲(chǔ)過程在第一次執(zhí)行時(shí)進(jìn)行語法檢查和編譯,執(zhí)行后它的執(zhí)行計(jì)劃就駐留在高速緩存中,用于后續(xù)調(diào)用。存儲(chǔ)過程可以接受和輸出參數(shù)、返回執(zhí)行存儲(chǔ)過程的狀態(tài)值,還可以嵌套調(diào)用。6.1存儲(chǔ)過程概述6.1.2存儲(chǔ)過程的特點(diǎn)和類型1.存儲(chǔ)過程的特點(diǎn)(1)存儲(chǔ)過程允許標(biāo)準(zhǔn)組件式編程(2)存儲(chǔ)過程在服務(wù)器端運(yùn)行,執(zhí)行速度快(3)存儲(chǔ)過程能夠減少網(wǎng)絡(luò)流量(4)存儲(chǔ)過程可被作為一種安全機(jī)制來充分利用6.1存儲(chǔ)過程概述6.1.2存儲(chǔ)過程的特點(diǎn)和類型2.存儲(chǔ)過程的分類

(1)系統(tǒng)存儲(chǔ)過程

系統(tǒng)存儲(chǔ)過程主要存儲(chǔ)在master數(shù)據(jù)庫中,一般以“sp_”為前綴。

(2)用戶自定義的存儲(chǔ)過程

用戶自定義存儲(chǔ)過程是由用戶創(chuàng)建并能夠完成某些特定功能而編寫的存儲(chǔ)過程,它可以輸入?yún)?shù)、向客戶端返回表格或結(jié)果、消息等,也可以返回輸出參數(shù)。

(3)擴(kuò)展存儲(chǔ)過程

擴(kuò)展存儲(chǔ)過程通常以“xp_”為前綴。6.1存儲(chǔ)過程概述6.2.1創(chuàng)建存儲(chǔ)過程1.使用CREATEPROCEDURE語句創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程的語法如下:CREATEPROCEDURE|PROCprocedure_name[;number][{@parameterdata_type}[VARYING][=default][OUTPUT]][,...n][WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}][FORREPLICATION]ASsql_statement[...n]6.2存儲(chǔ)過程常用操作

使用CREATEPROCEDURE語句創(chuàng)建一個(gè)存儲(chǔ)過程,用來根據(jù)學(xué)生編號(hào)查詢學(xué)生信息。具體代碼如下:CreateProcedureProc_stu1@Proc_Snochar(10)ASSelect*fromStudentwhereSno=@Proc_Sno運(yùn)行結(jié)果如圖6-1所示。案例6-2圖6-1存儲(chǔ)過程創(chuàng)建示例6.2存儲(chǔ)過程常用操作6.2.1創(chuàng)建存儲(chǔ)過程2.在SQLServerManagementStudio中創(chuàng)建存儲(chǔ)過程按照下述步驟用SQLServerManagementStudio創(chuàng)建一個(gè)能夠解決這一問題的存儲(chǔ)過程:1)啟動(dòng)SQLServerManagementStudio,登錄服務(wù)器,在“對(duì)象資源管理器”窗格中,選擇本地?cái)?shù)據(jù)庫實(shí)例→“數(shù)據(jù)庫”→“XSCJ”→“可編程性”→“存儲(chǔ)過程”選項(xiàng)。2)右擊“存儲(chǔ)過程”選項(xiàng),在彈出的快捷菜單中選擇“存儲(chǔ)過程”選項(xiàng),如圖6-2所示。6.2存儲(chǔ)過程常用操作

在XSCJ數(shù)據(jù)庫中,創(chuàng)建存儲(chǔ)過程實(shí)現(xiàn)對(duì)學(xué)生成績進(jìn)行查詢。要求在查詢時(shí)提供需要查詢的學(xué)生姓名和課程名稱,存儲(chǔ)過程根據(jù)用戶提供的信息對(duì)數(shù)據(jù)進(jìn)行查詢,并顯示成績信息。案例6-33)出現(xiàn)圖6-3所示的創(chuàng)建存儲(chǔ)過程的查詢編輯器窗格,其中已經(jīng)加入了創(chuàng)建存儲(chǔ)過程的代碼。6.2存儲(chǔ)過程常用操作圖6-2SQLServerManagementStudio中存儲(chǔ)過程選項(xiàng)圖6-3創(chuàng)建存儲(chǔ)過程4)單擊菜單欄上的“查詢”→“指定模版參數(shù)的值”選項(xiàng),彈出圖6-4所示的對(duì)話框,其中Author(作者)、CreateDate(創(chuàng)建時(shí)間)、Description(說明)為可選項(xiàng),內(nèi)容可以為空。設(shè)置結(jié)果如圖6-4所示。

5)設(shè)置完畢,單擊【確定】按鈕,返回到創(chuàng)建存儲(chǔ)過程的查詢編輯器窗格,如圖6-5所示,此時(shí)代碼已經(jīng)改變。6.2存儲(chǔ)過程常用操作圖6-4指定模版參數(shù)設(shè)置對(duì)話框圖6-5設(shè)置參數(shù)后的查詢編輯器6)在“Insertstatementsforprocedurehere”下輸入T-SQL代碼,在本例中輸入:SELECTstudent.sname,ame,score.gradeFROMstudentINNERJOINscoreONstudent.sno=score.snoINNERJOINcourseONo=oWHEREstudent.sname=@stunameANDame=@kcname6.2存儲(chǔ)過程常用操作7)單擊【執(zhí)行】按鈕完成操作,最后的結(jié)果如圖6-6所示。6.2存儲(chǔ)過程常用操作圖6-6設(shè)計(jì)完成的存儲(chǔ)過程6.2.2創(chuàng)建參數(shù)化存儲(chǔ)過程存儲(chǔ)過程提供了一些過程式的能力,它也提升了性能,但是如果存儲(chǔ)過程沒有接受一些數(shù)據(jù),告訴其完成的任務(wù),則在大多數(shù)情況下,存儲(chǔ)過程不會(huì)有太多的幫助。在存儲(chǔ)過程的外部,可以通過位置或者引用傳遞參數(shù)。在存儲(chǔ)過程的內(nèi)部,由于它們使用同樣的方式聲明,不用關(guān)心參數(shù)傳遞的方式。如果存儲(chǔ)過程需要帶參數(shù),在編寫時(shí),直接在CREATEPROCEDURE語句后附加參數(shù),不同于函數(shù),存儲(chǔ)過程的參數(shù)不需要用括號(hào)括起。6.2存儲(chǔ)過程常用操作6.2.3查看及修改存儲(chǔ)過程1.使用SQLServerManagementStudio查看存儲(chǔ)過程在SQLServerManagementStudio中,首先找到要查看的存儲(chǔ)過程,然后用鼠標(biāo)右鍵單擊要查看的存儲(chǔ)過程,打開彈出菜單,如圖6-8。6.2存儲(chǔ)過程常用操作圖6-8存儲(chǔ)過程菜單選項(xiàng)6.2.3查看及修改存儲(chǔ)過程如果要查看存儲(chǔ)過程的源代碼,可以在彈出菜單中選擇“修改”命令,即可在查詢編輯器中查看該存儲(chǔ)過程的定義文本,如圖6-9。6.2存儲(chǔ)過程常用操作圖6-9查看存儲(chǔ)過程定義文本6.2.3查看及修改存儲(chǔ)過程如果要查看存儲(chǔ)過程的相關(guān)性,在彈出菜單中選擇“查看依賴關(guān)系”命令即可。如果要查看存儲(chǔ)過程的其他內(nèi)容,可在彈出菜單中選擇“屬性”命令,打開如圖6-10所示屬性窗口。6.2存儲(chǔ)過程常用操作圖6-10存儲(chǔ)過程屬性6.2.3查看及修改存儲(chǔ)過程2.使用系統(tǒng)存儲(chǔ)過程查看存儲(chǔ)過程定義

使用系統(tǒng)存儲(chǔ)過程sp_helptext,可以查看未加密的存儲(chǔ)過程的文本。其語法格式如下:

sp_helptext[@objename=]‘name’[,[@columnname= ]‘computed_column_name’]各參數(shù)說明如下:[@objename=]‘name’:存儲(chǔ)過程的名稱,將顯示該存儲(chǔ)過程的定義文本。該存儲(chǔ)過程必須在當(dāng)前數(shù)據(jù)庫中。[@columnname=]‘computed_column_name’:要顯示其定義信息的計(jì)算列的名稱。必須將包含列的表指定為name。column_name的數(shù)據(jù)類型為sysname,無默認(rèn)值。6.2存儲(chǔ)過程常用操作

使用存儲(chǔ)過程顯示存儲(chǔ)過程Proc_Q_stugrade的定義文本。EXECsp_helptext'Proc_Q_stugrade'

查詢結(jié)果如圖6-11所示。案例6-46.2存儲(chǔ)過程常用操作圖6-11使用存儲(chǔ)過程顯示存儲(chǔ)過程Proc_Stu的定義文本6.2.3查看及修改存儲(chǔ)過程3.修改存儲(chǔ)過程

在SQLServer2022中,可以使用ALTERPROCEDURE語句修改已經(jīng)存在的存儲(chǔ)過程,即直接將創(chuàng)建中的CREATE關(guān)鍵字替換為ALTER即可。雖然也可以刪除并重新創(chuàng)建該存儲(chǔ)過程也可以達(dá)到修改存儲(chǔ)過程的目的,但是將丟失與該存儲(chǔ)過程相關(guān)聯(lián)的所有權(quán)限。

(1)ALTERPROCEDURE語句 ALTERPROCEDURE語句用來修改通過執(zhí)行CREATEPROCEDURE語句創(chuàng)建的過程。該語句修改存儲(chǔ)過程時(shí)不會(huì)更改權(quán)限,也不影響相關(guān)的存儲(chǔ)過程或觸發(fā)器。6.2存儲(chǔ)過程常用操作ALTERPROCEDURE語句的語法如下:ALTER{PROC|PROCEDURE}procedure_name[;number] [{@parameterdata_type} [VARYING][=default][OUTPUT]][,…n][WITH]{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}][FORREPLICATION]AS sql_statement[…n]通過對(duì)ALTERPROCEDURE語句語法的分析,可以看出,與CREATEPROCEDURE語句的語法構(gòu)成完全一致,各參數(shù)的說明,請(qǐng)參考CREATEPROCEDURE語句的語法說明。6.2存儲(chǔ)過程常用操作

出于對(duì)安全性的考慮,對(duì)案例6-2中創(chuàng)建的存儲(chǔ)過程進(jìn)行加密處理。USEXSCJGOALTERPROCProc_stu1@Proc_Snochar(10)WITHencryptionASSelect*fromStudentwhereSno=@Proc_SnoGO案例6-56.2存儲(chǔ)過程常用操作圖6-12對(duì)創(chuàng)建的存儲(chǔ)過程進(jìn)行加密處理(2)使用SQLServerManagementStudio修改存儲(chǔ)過程

在SQLServerManagementStudio中,選擇要修改的存儲(chǔ)過程,然后用鼠標(biāo)右鍵單擊所要修改的存儲(chǔ)過程,在彈出菜單中選擇“修改”命令,在圖6-13所示的修改存儲(chǔ)過程的查詢編輯器窗口中對(duì)存儲(chǔ)過程代碼進(jìn)行修改。

修改存儲(chǔ)過程的結(jié)果如圖6-14所示。6.2存儲(chǔ)過程常用操作圖6-13修改存儲(chǔ)過程圖6-14修改存儲(chǔ)過程6.2.4重命名或刪除存儲(chǔ)過程(1)使用SQLServerManagementStudio重命名在SQLServerManagementStudio中,首先找到要修改的存儲(chǔ)過程,然后用鼠標(biāo)右鍵單擊要重命名的存儲(chǔ)過程,在彈出菜單中選擇“重命名”命令,就可以重新命名該存儲(chǔ)過程,如圖6-15所示。6.2存儲(chǔ)過程常用操作圖6-15修改存儲(chǔ)過程6.2.4重命名或刪除存儲(chǔ)過程(2)使用系統(tǒng)存儲(chǔ)過程sp_rename進(jìn)行重命名使用系統(tǒng)存儲(chǔ)過程sp_rename可以重命名存儲(chǔ)過程。其語法格式如下:sp_rename[@objname=]‘object_name’, [@newname=]’new_name’ [,[@objtype=] ‘object_type’]各參數(shù)說明如下:[@objname=]‘object_name’:存儲(chǔ)過程或觸發(fā)器的當(dāng)前名稱。[@newname=]’new_name’:要執(zhí)行存儲(chǔ)過程或觸發(fā)器的新名稱。[,[@objtype=] ‘object_type’]:要重命名的對(duì)象的類型。對(duì)象類型為存儲(chǔ)過程或觸發(fā)器時(shí),其值為OBJECT。6.2存儲(chǔ)過程常用操作

使用存儲(chǔ)過程將案例6-2中創(chuàng)建的存儲(chǔ)過程Proc_Stu重新命名為Proc_Stu_Info。在查詢窗口中執(zhí)行下列T-SQL語句:EXECsp_rename‘Proc_Stu’,’Proc_Stu_Info’執(zhí)行結(jié)果如圖6-16所示。案例6-66.2存儲(chǔ)過程常用操作圖6-16存儲(chǔ)過程重命名2、刪除存儲(chǔ)過程(1)使用SQLServerManagementStudio刪除存儲(chǔ)過程,刪除存儲(chǔ)過程的步驟如下:1)用鼠標(biāo)右鍵單擊待刪除的存儲(chǔ)過程,在彈出菜單中選擇“刪除”命令,或單擊要?jiǎng)h除的存儲(chǔ)過程,按下【delete】鍵,彈出如圖6-17所示的“刪除對(duì)象”窗口6.2存儲(chǔ)過程常用操作圖6-17刪除存儲(chǔ)過程2、刪除存儲(chǔ)過程(1)使用SQLServerManagementStudio刪除存儲(chǔ)過程,刪除存儲(chǔ)過程的步驟如下:2)單擊【顯示依賴關(guān)系】按鈕,查看當(dāng)前存儲(chǔ)過程與其他對(duì)象的以來關(guān)系,如圖6-18所示。3)確定無誤后,單擊【確定】按鈕,完成刪除存儲(chǔ)過程。6.2存儲(chǔ)過程常用操作圖6-18顯示存儲(chǔ)過程依賴關(guān)系2、刪除存儲(chǔ)過程(2)使用DROPPROCEDURE命令刪除存儲(chǔ)過程刪除存儲(chǔ)過程,直接使用關(guān)鍵字DROPPROCEDURE即可刪除指定的存儲(chǔ)過程,語法如下: DROPPROCEDURE{procedure} [,...n]參數(shù)說明如下:procedure:是要?jiǎng)h除的存儲(chǔ)過程或存儲(chǔ)過程組的名稱。6.2存儲(chǔ)過程常用操作

使用存儲(chǔ)過程將案例6-6中重命名的存儲(chǔ)過程從數(shù)據(jù)庫中刪除。DROPPROCEDUREProc_Stu_Info結(jié)果如圖6-19所示。案例6-76.2存儲(chǔ)過程常用操作圖6-19刪除存儲(chǔ)過程6.3.1觸發(fā)器概述觸發(fā)器(Trigger)是一種特殊的存儲(chǔ)過程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動(dòng),而是由事件來出發(fā),例如當(dāng)對(duì)一個(gè)表進(jìn)行操作(insert、delete、update)時(shí)就會(huì)激活觸發(fā)器的執(zhí)行。6.3觸發(fā)器的應(yīng)用6.3.1觸發(fā)器概述觸發(fā)器作為一種非程序調(diào)用的存儲(chǔ)過程,在應(yīng)用過程中有下列優(yōu)勢(shì):預(yù)編譯、已優(yōu)化、效率較高,避免了SQL語句在網(wǎng)絡(luò)傳輸后再解釋的低效率??梢灾貜?fù)使用,減少開發(fā)人員的工作量。業(yè)務(wù)邏輯封裝性好,數(shù)據(jù)庫中很多問題都是可以在程序代碼中去實(shí)現(xiàn)的,但是將其分離出來在數(shù)據(jù)庫中處理,這樣邏輯上更加清晰,對(duì)于后期維護(hù)和二次開發(fā)的作用比較明顯。安全。不會(huì)有SQL語句注入問題。6.3觸發(fā)器的應(yīng)用6.3.2創(chuàng)建觸發(fā)器觸發(fā)器的作用域取決于事件。例如,每當(dāng)數(shù)據(jù)庫中或服務(wù)器實(shí)例上發(fā)生CREATE_TABLE事件時(shí),都會(huì)激發(fā)為響應(yīng)CREATE_TABLE事件創(chuàng)建的DDL觸發(fā)器。僅當(dāng)服務(wù)器上發(fā)生CREATE_LOGON事件時(shí),才能激發(fā)為響應(yīng)CREATE_LOGON事件創(chuàng)建的DDL觸發(fā)器。6.3觸發(fā)器的應(yīng)用6.3.2創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器的語法如下:CREATETRIGGERtrigger_name

ON{table|view}

[WITHENCRYPTION]

{

{{FOR|AFTER|INSTEADOF}{[INSERT][,][UPDATE]}[WITHAPPEND]

[NOTFORREPLICATION]

AS

[{IFUPDATE(column)

[{AND|OR}UPDATE(column)]

[...n]

|IF(COLUMNS_UPDATED(){bitwise_operator}updated_bitmask)

{comparison_operator}column_bitmask[...n]

}]

sql_statement[...n]

}

}

6.3觸發(fā)器的應(yīng)用6.3.2創(chuàng)建觸發(fā)器各參數(shù)的說明:trigger_name

:是觸發(fā)器的名稱。觸發(fā)器名稱必須符合標(biāo)識(shí)符規(guī)則,并且在數(shù)據(jù)庫中必須唯一。不能以#或##開頭。

Table|view

:是在其上執(zhí)行觸發(fā)器的表或視圖,有時(shí)稱為觸發(fā)器表或觸發(fā)器視圖??梢赃x擇是否指定表或視圖的所有者名稱。

WITHENCRYPTION

:加密syscomments表中包含CREATETRIGGER語句文本的條目。FOR|AFTER

:AFTER指定觸發(fā)器只有在觸發(fā)SQL語句中指定的所有操作都已成功執(zhí)行后才激發(fā)。所有的引用級(jí)聯(lián)操作和約束檢查也必須成功完成后,才能執(zhí)行此觸發(fā)器。

如果僅指定FOR關(guān)鍵字,則AFTER是默認(rèn)設(shè)置。6.3觸發(fā)器的應(yīng)用6.3.2創(chuàng)建觸發(fā)器各參數(shù)的說明:INSTEADOF

:指定執(zhí)行觸發(fā)器而不是執(zhí)行觸發(fā)SQL語句,從而替代觸發(fā)語句的操作。INSTEADOF觸發(fā)器不能在WITHCHECKOPTION的可更新視圖上定義。

{[DELETE][,][INSERT][,][UPDATE]}

:是指定在表或視圖上執(zhí)行哪些數(shù)據(jù)修改語句時(shí)將激活觸發(fā)器的關(guān)鍵字。必須至少指定一個(gè)選項(xiàng)。WITHAPPEND

:指定應(yīng)該添加現(xiàn)有類型的其它觸發(fā)器。只有當(dāng)兼容級(jí)別是65或更低時(shí),才需要使用該可選子句。6.3觸發(fā)器的應(yīng)用6.3.2創(chuàng)建觸發(fā)器各參數(shù)的說明:WITHAPPEND不能與INSTEADOF觸發(fā)器一起使用,或者,如果顯式聲明AFTER觸發(fā)器,也不能使用該子句。NOTFORREPLICATION

:表示當(dāng)復(fù)制進(jìn)程更改觸發(fā)器所涉及的表時(shí),不應(yīng)執(zhí)行該觸發(fā)器。

AS

:是觸發(fā)器要執(zhí)行的操作。sql_statement

:是觸發(fā)器的條件和操作。觸發(fā)器條件指定其它準(zhǔn)則,以確定DELETE、INSERT或UPDATE語句是否導(dǎo)致執(zhí)行觸發(fā)器操作。6.3觸發(fā)器的應(yīng)用

為Student表創(chuàng)建觸發(fā)器,當(dāng)向該表中插入數(shù)據(jù)時(shí)給出提示信息。操作步驟如下:打開SQLServerManagementStudio,并連接到SQLServer2022中的數(shù)據(jù)庫。單擊工具欄中“新建查詢”按鈕,新建查詢編輯器,輸入如下SQL語句代碼:CREATETRIGGERTrig_stuDMLONstudentAFTERINSERTASRAISERROR(‘正在向表中插入數(shù)據(jù)’,16,10);單擊“執(zhí)行”按鈕,即可執(zhí)行上述SQL代碼,創(chuàng)建名稱為Trig_stu的DML觸發(fā)器。案例6-86.3觸發(fā)器的應(yīng)用6.3.3修改與管理觸發(fā)器1.使用ALTERTRIGGER語句修改觸發(fā)器ALTERTRIGGERtrigger_name

ON{table|view}

[WITHENCRYPTION]

{{FOR|AFTER|INSTEADOF}{[INSERT][,][UPDATE]}

[WITHAPPEND]

[NOTFORREPLICATION]

AS

[{IFUPDATE(column)

[{AND|OR}UPDATE(column)]

[...n]

|IF(COLUMNS_UPDATED(){bitwise_operator}updated_bitmask)

{comparison_operator}column_bitmask[...n]

}]

sql_statement[...n]

}

其中各個(gè)參數(shù)與關(guān)鍵字的含義請(qǐng)參見創(chuàng)建觸發(fā)器的內(nèi)容。6.3觸發(fā)器的應(yīng)用6.3.3修改與管理觸發(fā)器2.使用sp_rename命令重命名觸發(fā)器可以使用存儲(chǔ)過程sp_name重命名觸發(fā)器,其語法格式為: sp_renameoldname,newname參數(shù)說明和用例請(qǐng)參考重命名存儲(chǔ)過程的說明。6.3觸發(fā)器的應(yīng)用6.3.3修改與管理觸發(fā)器3.查看觸發(fā)器查看已創(chuàng)建的觸發(fā)器,通常有3種方法:(1)使用系統(tǒng)存儲(chǔ)過程sp_helptrigger查看觸發(fā)器信息

可以使用系統(tǒng)存儲(chǔ)過程sp_helptrigger返回基本表中指定類型的觸發(fā)器信息。其語法格式如下:sp_helptrigger[@tablename=]‘table’[,[@triggertype=]‘type’]參數(shù)說明:[@tablename=]‘table’:是當(dāng)前數(shù)據(jù)庫中表的名稱,將返回該表的觸發(fā)器信息。[@triggertype=]‘type’:是觸發(fā)器的類型,將返回此類型觸發(fā)器的信息。如果不指定觸發(fā)器類型,將列出所有的觸發(fā)器。6.3觸發(fā)器的應(yīng)用

查看XSCJ數(shù)據(jù)庫中student表的觸發(fā)器類型。要實(shí)現(xiàn)這個(gè)操作,可以在查詢分析器中執(zhí)行下列T-SQL語句。USEXSCJGOEXECsp_helptrigger'student'EXECsp_helptrigger'student','INSERT'代碼的執(zhí)行結(jié)果如圖6-21所示。當(dāng)每次對(duì)Student表的數(shù)據(jù)進(jìn)行添加時(shí),都會(huì)顯示如圖6-21所示的消息內(nèi)容。案例6-96.3觸發(fā)器的應(yīng)用圖6-21查看XSCJ數(shù)據(jù)庫中student表的觸發(fā)器類型(2)使用系統(tǒng)存儲(chǔ)過程sp_helptext查看觸發(fā)器代碼

可以使用系統(tǒng)存儲(chǔ)過程sp_helptext查看觸發(fā)器的代碼,其語法格式如下:sp_helptext‘trigger_name’6.3觸發(fā)器的應(yīng)用

查看觸發(fā)器Trig_stuDML的所有者和創(chuàng)建日期。USEXSCJGOEXECsp_helptext‘Trig_stuDML’代碼的執(zhí)行結(jié)果如圖6-22所示。案例6-10圖6-22使用系統(tǒng)存儲(chǔ)過程sp_helptext查看觸發(fā)器代碼(3)使用系統(tǒng)存儲(chǔ)過程sp_help查看觸發(fā)器其他信息

可以使用系統(tǒng)存儲(chǔ)過程sp_help查看觸發(fā)器的其他信息,語法格式如下:sp_help‘trigger_name’6.3觸發(fā)器的應(yīng)用

查看觸發(fā)器Trig_stuDML的所有者和創(chuàng)建日期。USEXSCJGOEXECsp_help‘Trig_stuDML’代碼執(zhí)行結(jié)果如圖6-23所示。案例6-11圖6-23使用系統(tǒng)存儲(chǔ)過程sp_help查看觸發(fā)器其他信息6.3.3修改與管理觸發(fā)器4.禁用或啟用觸發(fā)器使用T-SQL語句中的ALTERTABLE命令實(shí)現(xiàn)禁用或啟用觸發(fā)器,其語法格式如下:ALTERTABLE觸發(fā)器所屬表名稱{ENABLE|DISABLE}TRIGGER{ALL|觸發(fā)器名稱[,...n]}參數(shù)說明:{ENABLE|DISABLE}TRIGGER:指定啟用或禁用trigger_name。當(dāng)一個(gè)觸發(fā)器被禁用時(shí),它對(duì)表的定義仍然存在;但是,當(dāng)在表上執(zhí)行INSERT、UPDATE或DELETE語句時(shí),觸發(fā)器中的操作將不執(zhí)行,除非重新啟用該觸發(fā)器。ALL:不指定觸發(fā)器名稱的話,指定ALL則啟用或禁用觸發(fā)器中的所有觸發(fā)器。6.3觸發(fā)器的應(yīng)用

暫時(shí)禁用觸發(fā)器Trig_stuDML的使用。要實(shí)現(xiàn)這一任務(wù),可以在查詢分析器中執(zhí)行下列T-SQL語句:USEXSCJGOALTERTABLEstudentDISABLETRIGGERTrig_stuDML代碼執(zhí)行結(jié)果如圖6-24所示。案例6-126.3觸發(fā)器的應(yīng)用圖6-24暫時(shí)禁用觸發(fā)器Trig_stuDML6.3.4觸發(fā)器的工作方式

觸發(fā)器通常有三個(gè)部分組成:1)事件。事件是指對(duì)數(shù)據(jù)庫的插入、刪除和修改等操作,觸發(fā)器在這些事件發(fā)生時(shí),將開始工作。2)條件。觸發(fā)器將測(cè)試條件是否成立。如果條件成立,就執(zhí)行相應(yīng)的動(dòng)作,否則什么也不做。3)動(dòng)作。如果觸發(fā)器測(cè)試滿足預(yù)設(shè)的條件,那么就由DBMS執(zhí)行對(duì)數(shù)據(jù)庫的操作。這些動(dòng)作既可以是一系列對(duì)數(shù)據(jù)庫的操作,甚至可以是與觸發(fā)事件本身無關(guān)的其他操作。6.3觸發(fā)器的應(yīng)用6.3.4觸發(fā)器的工作方式

觸發(fā)器的應(yīng)用中,有兩個(gè)特殊的表:inserted和deleted表。它們都是針對(duì)當(dāng)前觸發(fā)器的臨時(shí)表。這兩個(gè)表與觸發(fā)器所在表的結(jié)構(gòu)完全相同,而且總是存儲(chǔ)在內(nèi)存中。在執(zhí)行INSERT語句時(shí),插入到表中的新記錄也同時(shí)插入到inserted表中。在執(zhí)行UPDATE語句時(shí),系統(tǒng)首先刪除原有記錄,并將原有記錄插入到deleted表中,而新插入的記錄也同時(shí)插入到inserted表中。在執(zhí)行DELETE語句時(shí),刪除表中數(shù)據(jù)的同時(shí),也將該數(shù)據(jù)插入到deleted表中。觸發(fā)器會(huì)自動(dòng)記錄所要更新數(shù)據(jù)的新值與原值,根據(jù)對(duì)新值和原值的測(cè)試來決定是否執(zhí)行觸發(fā)器中預(yù)設(shè)的動(dòng)作。6.3觸發(fā)器的應(yīng)用6.4.1執(zhí)行帶回傳參數(shù)的存儲(chǔ)過程1.實(shí)驗(yàn)內(nèi)容:在XSCJ數(shù)據(jù)庫中,基于學(xué)生成績信息表score創(chuàng)建一個(gè)Proc_out的帶返回參數(shù)的存儲(chǔ)過程。效果如圖6-25所示。6.4實(shí)驗(yàn)六存儲(chǔ)過程及觸發(fā)器

圖6-25執(zhí)行帶回傳參數(shù)的存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論