




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第4章SQL Server 存儲過程與觸發(fā)器2021/5/41第4章SQL Server 存儲過程與觸發(fā)器2021/5/4.1 SQL Server 存儲過程4.1.1存儲過程概述 存儲過程(Stored Procedure)是一組為了完成特定功能T-SQL語句集合,經(jīng)編譯后存儲在SQL Server服務(wù)器端數(shù)據(jù)庫中。存儲過程可以分為兩類:系統(tǒng)存儲過程和自定義存儲過程。2021/5/424.1 SQL Server 存儲過程4.1.1存儲過程概系統(tǒng)存儲過程2021/5/43系統(tǒng)存儲過程2021/5/43系統(tǒng)存儲過程系統(tǒng)存儲過程在SQL Server安裝成功后,就已經(jīng)存儲在系統(tǒng)數(shù)據(jù)庫Master
2、中,這些存儲過程都是以sp_為前綴命名的它們主要是從系統(tǒng)表中獲取信息,系統(tǒng)管理員可以通過簡單調(diào)用系統(tǒng)存儲過程而完成復(fù)雜的SQL Server管理工作??梢酝ㄟ^系統(tǒng)存儲過程完成許多管理性或信息的操作。系統(tǒng)存儲過程在Master數(shù)據(jù)庫中,在其他數(shù)據(jù)庫中可以直接調(diào)用,調(diào)用時不必在存儲過程名前加上數(shù)據(jù)庫名。 2021/5/44系統(tǒng)存儲過程系統(tǒng)存儲過程在SQL Server安裝成功后,就自定義存儲過程自定義存儲過程是由用戶創(chuàng)建并能完成某一特定功能的存儲過程。 2021/5/45自定義存儲過程自定義存儲過程是由用戶創(chuàng)建并能完成某一特定功能存儲過程的優(yōu)點(diǎn)1提高應(yīng)用程序的通用性和可移植性2可以更有效地管理用戶
3、操作數(shù)據(jù)庫的權(quán)限 3可以提高T-SQL的速度4減輕服務(wù)器的負(fù)擔(dān)5塊化程序設(shè)計(jì)。6減少操作錯誤。7能自動處理復(fù)雜的或敏感的事務(wù)。8可以實(shí)現(xiàn)管理任務(wù)自動化。 2021/5/46存儲過程的優(yōu)點(diǎn)1提高應(yīng)用程序的通用性和可移植性2021/54.1.2存儲過程的創(chuàng)建與執(zhí)行創(chuàng)建前確定所有的輸入?yún)?shù)以及傳給調(diào)用者的輸出參數(shù)。被執(zhí)行的針對數(shù)據(jù)庫的操作語句,包括調(diào)用其它存儲過程的語句。返回給調(diào)用者的狀態(tài)值,以指明調(diào)用是成功還是失敗。一個存儲過程的最大尺寸為128M2021/5/474.1.2存儲過程的創(chuàng)建與執(zhí)行創(chuàng)建前確定2021/5/471.直接創(chuàng)建存儲過程(1)打開Microsoft SQL Server Ma
4、nager管理器(2)單擊數(shù)據(jù)庫前面的“+”號,然后單擊“Material_Data1”數(shù)據(jù)庫前面的“+”號,再單擊“可編程性”前面的“+”號,選擇“存儲過程”,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中單擊“新建存儲過程”命令。(3)打開了一個創(chuàng)建存儲過程的數(shù)據(jù)庫引擎查詢模板,修改相應(yīng)參數(shù)即可。 2021/5/481.直接創(chuàng)建存儲過程(1)打開Microsoft SQL S直接創(chuàng)建存儲過程2021/5/49直接創(chuàng)建存儲過程2021/5/492.代碼創(chuàng)建存儲過程語法CREATE PROCEDURE procedure_name;number parameter data_type VARYING=def
5、aultOUTPUT,.n WITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION AS sql_statement .n begin 命令行或命令塊 end2021/5/4102.代碼創(chuàng)建存儲過程語法2021/5/410說明procedure_name:用于指定要創(chuàng)建的存儲過程的名稱。 number:該參數(shù)是可選的整數(shù),它用來對同名的存儲過程分組,以便用一條 DROP PROCEDURE 語句即可將同組的過程一起除去。 parameter:過程中的參數(shù)。在 CREATE PROCEDURE 語句中可以聲明一個或多個參數(shù)。 data_type:用于指定參數(shù)的
6、數(shù)據(jù)類型。 Default:用于指定參數(shù)的默認(rèn)值。 OUTPUT:表明該參數(shù)是一個返回參數(shù)。recompile:表示每次執(zhí)行此存儲過程時都重新編譯一次 encryption:所創(chuàng)建的存儲過程的內(nèi)容會被加密 2021/5/411說明procedure_name:用于指定要創(chuàng)建的存儲過程的3.代碼執(zhí)行存儲過程利用T-SQL執(zhí)行存儲過程的語法格式如下: execute 過程名參數(shù)值,output(1)沒有參數(shù)的存儲過程創(chuàng)建 create proc hyprocl as select * from manager where wage 1800 執(zhí)行該存儲過程 execute hyprocl2021/
7、5/4123.代碼執(zhí)行存儲過程利用T-SQL執(zhí)行存儲過程的語法格式如下 (2) 有參數(shù)存儲過程創(chuàng)建create proc hyproc2 mingz int, maxgz intas select * from manager where wage between mingz and maxgz2021/5/413 (2) 有參數(shù)存儲過程創(chuàng)建create proc hypr執(zhí)行實(shí)例假設(shè)要顯示工資在1000到2000之間的manager信息,具體代碼: execute hyproc2 1005,18002021/5/414執(zhí)行實(shí)例假設(shè)要顯示工資在1000到2000之間的manage4.1.3 修
8、改存儲過程修改存儲過程具體格式如下: alter proc過程名 parameter參數(shù)類型 parameter參數(shù)類型output as sql_statement .n begin 命令行或命令塊 end2021/5/4154.1.3 修改存儲過程修改存儲過程具體格式如下:2021/實(shí)例修改存貯過程hyproc2, 輸出manager性別分類人員數(shù)與總工資。 alter proc hyproc2 sex1 char(2), managercount int output, wagetotal real output asbegin Select * from manager select
9、managercount=count(wage) from manager where sex=sex1 select wagetotal=sum(wage) from manager where sex=sex1 end 2021/5/416實(shí)例修改存貯過程hyproc2, 輸出manager性別分類實(shí)例假設(shè)要顯示manager信息及輸出工資的最大值與平均值,具體代碼如下:Declare x1 char(2), x2 realexecute hyproc2 男,x1 output,x2 output2021/5/417實(shí)例假設(shè)要顯示manager信息及輸出工資的最大值與平均值,4.2 SQL
10、 Server 觸發(fā)器 觸發(fā)器是一種特殊類型的存儲過程,是用戶自定義的復(fù)雜的完整性控制過程。特點(diǎn):功能強(qiáng)、開銷高維護(hù)行級數(shù)據(jù)的完整性與CHECK約束相比,能實(shí)現(xiàn)更加復(fù)雜的數(shù)據(jù)完整性2021/5/4184.2 SQL Server 觸發(fā)器 觸發(fā)器是一種特殊類型的數(shù)據(jù)完整性完整性是指數(shù)據(jù)的正確性相容性(一致性)三類基本完整性規(guī)則域完整性規(guī)則使基本表的列輸入有效??刂朴蛲暾杂行У姆椒ㄓ?限制數(shù)據(jù)類型、格式、可能的取值范圍、修改列值時必須滿足的條件等。實(shí)體完整性規(guī)則 實(shí)體完整性規(guī)則用來約束現(xiàn)實(shí)世界中的實(shí)體是可區(qū)分的,即它們具有唯一性標(biāo)識。這一規(guī)則在關(guān)系模型中的體現(xiàn)是基本表所有主屬性都不能取空值(NU
11、LL)。參照完整性規(guī)則參照完整性規(guī)則用來約束具有參照關(guān)系的兩個表中,主碼和外碼的數(shù)據(jù)要保持一致。2021/5/419數(shù)據(jù)完整性完整性是指數(shù)據(jù)的2021/5/419觸發(fā)器的作用完成比約束更復(fù)雜的數(shù)據(jù)約束檢查所做的SQL是否允許觸發(fā)器可以檢查SQL所做的操作是否被允許。例如:在產(chǎn)品庫存表里,如果要刪除一條產(chǎn)品記錄,在刪除記錄時,觸發(fā)器可以檢查該產(chǎn)品庫存數(shù)量是否為零,如果不為零則取消該刪除操作。修改其它數(shù)據(jù)表里的數(shù)據(jù)當(dāng)一個SQL語句對數(shù)據(jù)表進(jìn)行操作的時候,觸發(fā)器可以根據(jù)該SQL語句的操作情況來對另一個數(shù)據(jù)表進(jìn)行操作。例如:一個訂單取消的時候,那么觸發(fā)器可以自動修改產(chǎn)品庫存表,在訂購量的字段上減去被取
12、消訂單的訂購數(shù)量。調(diào)用更多的存儲過程觸發(fā)器本身就是一種存儲過程,而存儲過程是可以嵌套使用的,所以觸發(fā)器也可以調(diào)用一個或多過存儲過程。2021/5/420觸發(fā)器的作用完成比約束更復(fù)雜的數(shù)據(jù)約束2021/5/420觸發(fā)器的作用發(fā)送SQL Mail在SQL語句執(zhí)行完之后,觸發(fā)器可以判斷更改過的記錄是否達(dá)到一定條件,如果達(dá)到這個條件的話,觸發(fā)器可以自動調(diào)用SQL Mail來發(fā)送郵件。例如:當(dāng)一個訂單交費(fèi)之后,可以物流人員發(fā)送Email,通知他盡快發(fā)貨。返回自定義的錯誤信息約束是不能返回信息的,而觸發(fā)器可以。例如插入一條重復(fù)記錄時,可以返回一個具體的友好的錯誤信息給前臺應(yīng)用程序。更改原本要操作的SQL語
13、句觸發(fā)器可以修改原本要操作的SQL語句例如原本的SQL語句是要刪除數(shù)據(jù)表里的記錄,但該數(shù)據(jù)表里的記錄是最要記錄,不允許刪除的,那么觸發(fā)器可以不執(zhí)行該語句。防止數(shù)據(jù)表構(gòu)結(jié)更改或數(shù)據(jù)表被刪除為了保護(hù)已經(jīng)建好的數(shù)據(jù)表,觸發(fā)器可以在接收到Drop和Alter開頭的SQL語句里,不進(jìn)行對數(shù)據(jù)表的操作。2021/5/421觸發(fā)器的作用發(fā)送SQL Mail2021/5/421觸發(fā)器的種類在SQL Server 2005中,觸發(fā)器可以分為兩大類:DML觸發(fā)器和DDL觸發(fā)器DML觸發(fā)器:DML觸發(fā)器是當(dāng)數(shù)據(jù)庫服務(wù)器中發(fā)生數(shù)據(jù)操作語言(Data Manipulation Language)事件時執(zhí)行的存儲過程。D
14、ML觸發(fā)器又分為兩類:After觸發(fā)器和Instead Of觸發(fā)器DDL觸發(fā)器:DDL觸發(fā)器是在響應(yīng)數(shù)據(jù)定義語言(Data Definition Language)事件時執(zhí)行的存儲過程。DDL觸發(fā)器一般用于執(zhí)行數(shù)據(jù)庫中管理任務(wù)。如審核和規(guī)范數(shù)據(jù)庫操作、防止數(shù)據(jù)庫表結(jié)構(gòu)被修改等。SQL SERVER 2005新增添功能2021/5/422觸發(fā)器的種類在SQL Server 2005中,觸發(fā)器可以分After觸發(fā)器和Instead Of觸發(fā)器After觸發(fā)器是在記錄更變完之后才被激活執(zhí)行的。以刪除記錄為例:SQL Server先將要刪除的記錄存放在刪除表里,然后把數(shù)據(jù)表里的記錄刪除。再激活A(yù)fte
15、r觸發(fā)器,執(zhí)行After觸發(fā)器里的SQL語句。執(zhí)行完畢之后, 刪除內(nèi)存中的刪除表,退出整個操作。Instead Of觸發(fā)器是在這些操作進(jìn)行之前就激活了,并且不再去執(zhí)行原來的SQL操作,而去運(yùn)行觸發(fā)器本身的SQL語句。2021/5/423After觸發(fā)器和Instead Of觸發(fā)器After觸發(fā)器觸發(fā)器的工作原理在SQL Server 2005里,為每個DML觸發(fā)器都定義了兩個特殊的表,一個是插入表,一個是刪除表。這兩個表是建在數(shù)據(jù)庫服務(wù)器的內(nèi)存中的,是由系統(tǒng)管理的邏輯表,而不是真正存儲在數(shù)據(jù)庫中的物理表。對于這兩個表,用戶只有讀取的權(quán)限,沒有修改的權(quán)限。這兩個表的結(jié)構(gòu)與觸發(fā)器所在數(shù)據(jù)表的結(jié)構(gòu)是
16、完全一致的,當(dāng)觸發(fā)器的工作完成之后,這兩個表也將會從內(nèi)存中刪除。插入表里存放的是更新前的記錄對于插入記錄操作來說,插入表里存放的是要插入的數(shù)據(jù)對于更新記錄操作來說,插入表里存放的是要更新的記錄。刪除表里存放的是更新后的記錄對于更新記錄操作來說,刪除表里存放的是更新前的記錄(更新完后即被刪除);對于刪除記錄操作來說,刪除表里存入的是被刪除的舊記錄。2021/5/424觸發(fā)器的工作原理在SQL Server 2005里,為每個D觸發(fā)器的工作原理激活觸發(fā)器的動作Inserted表Deleted表Insert存放要插入的記錄Update存放要更新的記錄存放更新前的舊記錄Delete存放要刪除的舊記錄2
17、021/5/425觸發(fā)器的工作原理激活觸發(fā)器的動作Inserted表Delet其他注意事項(xiàng)After觸發(fā)器只能用于數(shù)據(jù)表中,Instead Of觸發(fā)器可以用于數(shù)據(jù)表和視圖上,但兩種觸發(fā)器都不可以建立在臨時表上。一個數(shù)據(jù)表可以有多個觸發(fā)器,但是一個觸發(fā)器只能對應(yīng)一個表。在同一個數(shù)據(jù)表中,對每個操作(如Insert、Update、Delete)而言可以建立許多個After觸發(fā)器,但I(xiàn)nstead Of觸發(fā)器針對每個操作只有建立一個。如果針對某個操作即設(shè)置了After觸發(fā)器又設(shè)置了Instead Of觸發(fā)器,那么Instead of觸發(fā)器一定會激活,而After觸發(fā)器就不一定會激活了。2021/5/
18、426其他注意事項(xiàng)After觸發(fā)器只能用于數(shù)據(jù)表中,Instead4.2.1觸發(fā)器定義語法after觸發(fā)器: create trigger 觸發(fā)器名 on 表名 with encryption for insert,update,delete as begin 命令行或程序塊 endInstead of觸發(fā)器: create trigger 觸發(fā)器名 on 表名或視圖名 instead of insert,update,delete as begin 命令行或程序塊 end2021/5/4274.2.1觸發(fā)器定義語法after觸發(fā)器:2021/5/42實(shí)例創(chuàng)建一個觸發(fā)器,向manager中插入
19、一條記錄,同時創(chuàng)建一個數(shù)據(jù)庫表并向表中插入兩條記錄。(1)打開Microsoft SQL Server Manager管理器。(2)新建一個數(shù)據(jù)庫引擎查詢文檔。(3)在數(shù)據(jù)庫引擎查詢文檔中輸入如下代碼:Use Material_Data1(4)按鍵盤上的F5”鍵,顯示如下提示信息:命令已成功完成。(5)這樣就打開要使用的數(shù)據(jù)庫。 2021/5/428實(shí)例創(chuàng)建一個觸發(fā)器,向manager中插入一條記錄,同時創(chuàng)建實(shí)例create trigger hytriggerl on manager for update as begin create table triuser( userid int id
20、entity(1,1)primary key, usermame varchar(50), userpwd varchar(50) ) insert into triuser(username,userpwd)values(李明,111) insert into triuser(usermame,userpwd)values(王明,222) insert into triuser(usermame,userpwd)values(劉芳,333)end2021/5/429實(shí)例create trigger hytriggerl on實(shí)例 (6)選擇創(chuàng)建觸發(fā)器的代碼,按鍵盤上的F5”鍵,顯示如下提示信
21、息: 命令已成功完成。 (7)這樣就成功創(chuàng)建了觸發(fā)器。在這里要注意,只是創(chuàng)建了觸發(fā)器,并沒有執(zhí)行觸發(fā)器中的代碼,即表triuser還不存在, 當(dāng)然該表中也不會有記錄。 (8)下面來通過對manager表的更新操作調(diào)用觸發(fā)器hytriggerl,具體代碼如下: Update manager set wage=wage+100 where managerNo=001 (9)選擇SQL語句,按下鍵盤上的F5”鍵執(zhí)行該SQL語句,顯示如圖4.5提示信息:2021/5/430實(shí)例 (6)選擇創(chuàng)建觸發(fā)器的代碼,按鍵盤上的F5”鍵,顯示實(shí)例 圖4.5 執(zhí)行觸發(fā)器 2021/5/431實(shí)例 圖4.5 執(zhí)行觸發(fā)
22、器 2021/5/431實(shí)例 (10)提示信息表示影響了四行,即更新了倉庫表中的一條記錄,創(chuàng)建triuser表,并向該表中插入三條記錄,下面通過select * from triuser來顯示觸發(fā)器產(chǎn)生新表中的數(shù)據(jù)信息,如圖4.6所示。2021/5/432實(shí)例 (10)提示信息表示影響了四行,即更新了倉庫表中的實(shí)例圖4.6 顯示觸發(fā)器執(zhí)行后的結(jié)果 2021/5/433實(shí)例圖4.6 顯示觸發(fā)器執(zhí)行后的結(jié)果 2021/5/433實(shí)例在訂單明細(xì)表里,折扣字段不能大于0.6,如果插入記錄時,折扣大于0.6的話,回滾操作。CREATE TRIGGER 訂單明細(xì)_Insert ON 訂單明細(xì) AFTER
23、INSERTAS BEGIN if (Select 折扣 from inserted)0.6 begin print 折扣不能大于0.6 Rollback Transaction endENDGO2021/5/434實(shí)例在訂單明細(xì)表里,折扣字段不能大于0.6,如果插入記錄時,實(shí)例在訂單明細(xì)表里,折扣字段不能大于0.6,如果插入記錄時,折扣大于0.6的話,回滾操作。CREATE TRIGGER 訂單明細(xì)_Insert ON 訂單明細(xì) Instead Of INSERTAS BEGIN declare 訂單ID int,產(chǎn)品ID int,單價 money,數(shù)量 smallint, 折扣 real
24、set 訂單ID = (select 訂單ID from inserted) set 產(chǎn)品ID = (select 產(chǎn)品ID from inserted) set 單價 = (select 單價 from inserted) set 數(shù)量 = (select 數(shù)量 from inserted) set 折扣 = (select 折扣 from inserted) if (折扣)0.6 print 折扣不能大于0.6 else INSERT into訂單明細(xì)(訂單ID,產(chǎn)品ID,單價,數(shù)量, 折扣)2021/5/435實(shí)例在訂單明細(xì)表里,折扣字段不能大于0.6,如果插入記錄時,實(shí)例如果更改了學(xué)生
25、的學(xué)號, 希望他的借書記錄仍然與這個學(xué)生相關(guān)(也就是同時更改借書記錄表的學(xué)號)Create Trigger truStudent On Student -在Student表中創(chuàng)建觸發(fā)器 for Update -為什么事件觸發(fā) As -事件觸發(fā)后所要做的事情 if Update(StudentID) begin Update BorrowRecord Set StudentID=i.StudentID From BorrowRecord br , Deleted d ,Inserted i Where br.StudentID=d.StudentID end 2021/5/436實(shí)例如果更改了學(xué)
26、生的學(xué)號, 希望他的借書記錄仍然與這個學(xué)生相實(shí)例如果該學(xué)生已經(jīng)畢業(yè),希望刪除他的學(xué)號的同時,也刪除它的借書記錄。 Create trigger trdStudent On Student for Delete As Delete BorrowRecord From BorrowRecord br , Delted d Where br.StudentID=d.StudentID 2021/5/437實(shí)例如果該學(xué)生已經(jīng)畢業(yè),希望刪除他的學(xué)號的同時,也刪除它的借4.2.2 查看觸發(fā)器基本信息通過sp_help能夠查看觸發(fā)器的基本信息觸發(fā)器名、所有者、創(chuàng)建者和創(chuàng)建時間。其語法格式如下:exec sp
27、_help 觸發(fā)器名 如查看觸發(fā)器hytriggerl信息exec sp_help hytriggerl2021/5/4384.2.2 查看觸發(fā)器基本信息通過sp_help能夠查看觸發(fā)實(shí)例 圖4.7 查看觸發(fā)器基本信息 2021/5/439實(shí)例 圖4.7 查看觸發(fā)器基本信息 2021/5/4394.2.3 查看觸發(fā)器代碼通過sp_helptext能夠查看觸發(fā)器SQL的代碼信息,但要注意如果在創(chuàng)建觸發(fā)器時使with encrypdon選項(xiàng),則執(zhí)行該命令也看不到SQL代碼。其語法格式如下:exec sp_helptext 觸發(fā)器名。若要查看觸發(fā)器hytriggerl代碼exec sp_helpte
28、xt hytriggerl2021/5/4404.2.3 查看觸發(fā)器代碼通過sp_helptext能夠查看實(shí)例圖4.8 查看觸發(fā)器hytriggerl代碼2021/5/441實(shí)例圖4.8 查看觸發(fā)器hytriggerl代碼2021/54.2.4 修改觸發(fā)器 修改觸發(fā)器的方法很簡單,利用T-SQL修改觸發(fā)器的語法格式如下:after觸發(fā)器: alter trigger 觸發(fā)器名 On 表名with encryption for insert,update,delete as begin 命令行或程序塊 End2021/5/4424.2.4 修改觸發(fā)器 修改觸發(fā)器的方法很簡單,利用T-S實(shí)例修改h
29、ytriggerl插入行數(shù)據(jù)劉芳為張清alter trigger hytriggerl on manager for update as begin create table triuser( userid int identity(1,1)primary key, usermame varchar(50), userpwd varchar(50) ) insert into triuser(username,userpwd)values(李明,111) insert into triuser(usermame,userpwd)values(王明,222) insert into triuse
30、r(usermame,userpwd)values(張清,333)end2021/5/443實(shí)例修改hytriggerl插入行數(shù)據(jù)劉芳為張清20修改instead of觸發(fā)器 alter trigger 觸發(fā)器名 on 表名或視圖名 instead of insert ,update, delete as begin 命令行或程序塊 end 修改觸發(fā)器與創(chuàng)建觸發(fā)器幾乎相同,只是把create改為alter即可。2021/5/444修改instead of觸發(fā)器 alter trigge4.2.5刪除觸發(fā)器刪除觸發(fā)器的方法很簡單,利用T-SQL刪除觸發(fā)器的語法格式如下: drop trigger
31、 觸發(fā)器名2021/5/4454.2.5刪除觸發(fā)器刪除觸發(fā)器的方法很簡單,利用T-SQL刪4.2.6 DDL觸發(fā)器DDL觸發(fā)器是SQL Server 2005新增的一個觸發(fā)器類型,是一種特殊的觸發(fā)器,它在響應(yīng)數(shù)據(jù)定義語言(DDL)語句時觸發(fā)。一般用于數(shù)據(jù)庫中執(zhí)行管理任務(wù)。與DML觸發(fā)器一樣,DDL觸發(fā)器也是通過事件來激活,并執(zhí)行其中 的SQL語句的。但與DML觸發(fā)器不同,DML觸發(fā)器是響應(yīng)Insert、Update或Delete語句而激活的,DDL觸發(fā)器是響應(yīng)Create、 Alter或Drop開頭的語句而激活的。2021/5/4464.2.6 DDL觸發(fā)器DDL觸發(fā)器是SQL Server
32、以下幾種情況下可以使用DDL觸發(fā)器:數(shù)據(jù)庫里的庫架構(gòu)或數(shù)據(jù)表架構(gòu)很重要,不允許被修改。防止數(shù)據(jù)庫或數(shù)據(jù)表被誤操作刪除。在修改某個數(shù)據(jù)表結(jié)構(gòu)的同時修改另一個數(shù)據(jù)表的相應(yīng)的結(jié)構(gòu)。要記錄對數(shù)據(jù)庫結(jié)構(gòu)操作的事件2021/5/447以下幾種情況下可以使用DDL觸發(fā)器:2021/5/447語法CREATE TRIGGER 觸發(fā)器名 ON ALL SERVER或DATABASEFOR 或 AFTER 激活DDL觸發(fā)器的事件AS 要執(zhí)行的SQL語句2021/5/448語法CREATE TRIGGER 觸發(fā)器名 2021/5/4實(shí)例啟動Management Studio,登錄到指定的服務(wù)器上。在【對象資源管理器
33、】下選擇【數(shù)據(jù)庫】,定位到【Northwind】數(shù)據(jù)庫上。單擊【新建查詢】按鈕,在彈出的【查詢編輯器】的編輯區(qū)里輸入以下代碼:CREATE TRIGGER 禁止對數(shù)據(jù)表操作ON DATABASE FOR DROP_TABLE, ALTER_TABLEAS PRINT 對不起,您不能對數(shù)據(jù)表進(jìn)行操作 ROLLBACK ;2021/5/449實(shí)例啟動Management Studio,登錄到指定的服務(wù)實(shí)例建立一個DDL觸發(fā)器,用于保護(hù)當(dāng)前SQL Server服務(wù)器里所有數(shù)據(jù)庫不能被刪除。具體代碼如下:CREATE TRIGGER 不允許刪除數(shù)據(jù)庫ON all server FOR DROP_DAT
34、ABASEAS PRINT 對不起,您不能刪除數(shù)據(jù)庫 ROLLBACK ;GO2021/5/450實(shí)例建立一個DDL觸發(fā)器,用于保護(hù)當(dāng)前SQL Server服在Management Studio如果要修改DDL觸發(fā)器內(nèi)容,就只能先刪除該觸發(fā)器,再重新建立一個DDL觸發(fā)器。2021/5/451在Management Studio如果要修改DDL觸發(fā)器內(nèi)觸發(fā)器的創(chuàng)建例:對S表定義一個刪除觸發(fā)器,使得當(dāng)刪除學(xué)生記錄時,將S_C表中相應(yīng)的選課記錄刪除。S(SNO,SNAME)S_C(SNO,CNO,SCORE)2021/5/452觸發(fā)器的創(chuàng)建例:對S表定義一個刪除觸發(fā)器,使得當(dāng)刪除學(xué)生記錄觸發(fā)器的創(chuàng)建
35、例:對S_C表定義一個插入觸發(fā)器,使得當(dāng)插入選課記錄時,檢查所參照的學(xué)生學(xué)號和課程號是否存在,如果不存在,則撤消所做的插入操作。S(SNO,SNAME)C(CNO,CNAME)S_C(SNO,CNO,SCORE)2021/5/453觸發(fā)器的創(chuàng)建例:對S_C表定義一個插入觸發(fā)器,使得當(dāng)插入選課觸發(fā)器的創(chuàng)建例:當(dāng)插入或更新學(xué)生成績時,觸發(fā)器檢查該課程是否為考查課,若是,則通過的成績只能以60分計(jì),未通過的只能以40分計(jì)。涉及的表結(jié)構(gòu):C1(Cno,Cname,Ctype) S_C(Sno,Cno,Score) 2021/5/454觸發(fā)器的創(chuàng)建例:當(dāng)插入或更新學(xué)生成績時,觸發(fā)器檢查該課程是否觸發(fā)器的創(chuàng)建例:對職工表定義一個插入觸發(fā)器,使得當(dāng)插入職工記錄時,檢
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題2.10 函數(shù)的綜合應(yīng)用(原卷版)-2024年高考數(shù)學(xué)一輪復(fù)習(xí)精講精練寶典(新高考專用)
- 2025年中考物理預(yù)測模擬試卷(含答案解析)
- 文藝匯演組織方案計(jì)劃
- 跨界學(xué)習(xí)的職業(yè)思路計(jì)劃
- 語言藝術(shù)欣賞活動安排計(jì)劃
- 員工培訓(xùn)部工作總結(jié)與學(xué)習(xí)計(jì)劃
- 主管全年任務(wù)計(jì)劃
- 四川景鑫礦業(yè)有限公司四川省南江縣大火地金礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案情況
- 醫(yī)學(xué)與急救知識培訓(xùn)課件
- 統(tǒng)編版小學(xué)語文二年級下冊第25課《羿射九日》精美課件
- 2024年四川成都中考生物卷試題解讀及答案詳解(精校打印版)
- 2024年全國國家版圖知識競賽題庫及答案(共200題)
- PICC常見并發(fā)癥處理
- NB∕T 10391-2020 水工隧洞設(shè)計(jì)規(guī)范
- 口腔主治醫(yī)師 《基礎(chǔ)知識》題庫及答案解析1000題
- HJ 651-2013 礦山生態(tài)環(huán)境保護(hù)與恢復(fù)治理技術(shù)規(guī)范(試行)
- 2024年遼寧省中考模擬提升練習(xí)英語試卷
- 孕產(chǎn)婦高危五色管理(醫(yī)學(xué)講座培訓(xùn)課件)
- 2024年陪診師準(zhǔn)入理論考核試題
- 拼多多企業(yè)戰(zhàn)略分析報告
- 梁柱加固施工方案
評論
0/150
提交評論