SQL2005數(shù)據(jù)庫應(yīng)用與開發(fā)08存儲(chǔ)過程和觸發(fā)器_第1頁
SQL2005數(shù)據(jù)庫應(yīng)用與開發(fā)08存儲(chǔ)過程和觸發(fā)器_第2頁
SQL2005數(shù)據(jù)庫應(yīng)用與開發(fā)08存儲(chǔ)過程和觸發(fā)器_第3頁
SQL2005數(shù)據(jù)庫應(yīng)用與開發(fā)08存儲(chǔ)過程和觸發(fā)器_第4頁
SQL2005數(shù)據(jù)庫應(yīng)用與開發(fā)08存儲(chǔ)過程和觸發(fā)器_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 第第08章章 存儲(chǔ)過程和觸發(fā)器存儲(chǔ)過程和觸發(fā)器 清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 第第08章章 存儲(chǔ)過程和觸發(fā)器存儲(chǔ)過程和觸發(fā)器 清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. S

2、QL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 存儲(chǔ)過程的主要用途:存儲(chǔ)過程的主要用途:n提高了處理復(fù)雜任務(wù)的能力。提高了處理復(fù)雜任務(wù)的能力。n增強(qiáng)了代碼的復(fù)用率和共享性。存儲(chǔ)過程一旦增強(qiáng)了代碼的復(fù)用率和共享性。存儲(chǔ)過程一旦創(chuàng)建后即可在程序中調(diào)用任意多次。創(chuàng)建后即可在程序中調(diào)用任意多次。n減少了網(wǎng)絡(luò)中數(shù)據(jù)的流量。存儲(chǔ)過程在服務(wù)器減少了網(wǎng)絡(luò)中數(shù)據(jù)的流量。存儲(chǔ)過程在服務(wù)器注冊,加快了過程的運(yùn)行速度。注冊,加快了過程的運(yùn)行速度。n加強(qiáng)了系統(tǒng)的安全性。存儲(chǔ)過程具有安全特性加強(qiáng)了系統(tǒng)的安全性。存儲(chǔ)過程具有安全特性(例如權(quán)限)和所有權(quán)鏈接,用戶可以被授予(例如權(quán)限)和所有權(quán)鏈

3、接,用戶可以被授予權(quán)限來執(zhí)行存儲(chǔ)過程而不必直接對(duì)存儲(chǔ)過程中權(quán)限來執(zhí)行存儲(chǔ)過程而不必直接對(duì)存儲(chǔ)過程中引用的對(duì)象具有權(quán)限。引用的對(duì)象具有權(quán)限。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.1.1 存儲(chǔ)過程的類型存儲(chǔ)過程的類型SQL Server 2005支持的存儲(chǔ)過程的類型主要有如下支持的存儲(chǔ)過程的類型主要有如下4類。類。(1)系統(tǒng)存儲(chǔ)過程。)系統(tǒng)存儲(chǔ)過程。SQL Server 2005 中的許多管中的許多管理活動(dòng)都是存儲(chǔ)過程執(zhí)行的。理活動(dòng)都是存儲(chǔ)

4、過程執(zhí)行的。n從物理意義上講,系統(tǒng)存儲(chǔ)過程存儲(chǔ)在源數(shù)據(jù)從物理意義上講,系統(tǒng)存儲(chǔ)過程存儲(chǔ)在源數(shù)據(jù)庫中,并且?guī)в袔熘?,并且?guī)в?sp_ 前綴。前綴。n從邏輯上講,系統(tǒng)存儲(chǔ)過程出現(xiàn)在每個(gè)系統(tǒng)定從邏輯上講,系統(tǒng)存儲(chǔ)過程出現(xiàn)在每個(gè)系統(tǒng)定義數(shù)據(jù)庫和用戶定義數(shù)據(jù)庫的義數(shù)據(jù)庫和用戶定義數(shù)據(jù)庫的 sys 構(gòu)架中。構(gòu)架中。(2)用戶定義的存儲(chǔ)過程。用戶可以自己創(chuàng)建存)用戶定義的存儲(chǔ)過程。用戶可以自己創(chuàng)建存儲(chǔ)過程。存儲(chǔ)過程是指封裝了可重用代碼的模塊儲(chǔ)過程。存儲(chǔ)過程是指封裝了可重用代碼的模塊或例程。用戶存儲(chǔ)過程有兩種類型:或例程。用戶存儲(chǔ)過程有兩種類型:清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Serve

5、r 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.1.1 存儲(chǔ)過程的類型存儲(chǔ)過程的類型nTransact-SQL 存儲(chǔ)過程是指保存的存儲(chǔ)過程是指保存的 Transact-SQL 語句集合,可接受和返回用戶提供的參數(shù)。語句集合,可接受和返回用戶提供的參數(shù)。nCLR 存儲(chǔ)過程是指對(duì)存儲(chǔ)過程是指對(duì) Microsoft .NET Framework 公共語言運(yùn)行時(shí)公共語言運(yùn)行時(shí) (CLR) 方法的引用,方法的引用,可以接受和返回用戶提供的參數(shù)可以接受和返回用戶提供的參數(shù)(3)臨時(shí)存儲(chǔ)過程。以)臨時(shí)存儲(chǔ)過程。以“#”或或

6、“#”為前綴,表示局為前綴,表示局部臨時(shí)存儲(chǔ)過程和全局臨時(shí)存儲(chǔ)過程。部臨時(shí)存儲(chǔ)過程和全局臨時(shí)存儲(chǔ)過程。(4)擴(kuò)展存儲(chǔ)過程。以)擴(kuò)展存儲(chǔ)過程。以xp_為前綴,是為前綴,是SQL Server 2005的實(shí)例可以動(dòng)態(tài)加載和運(yùn)行的的實(shí)例可以動(dòng)態(tài)加載和運(yùn)行的 DLL。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.1.2 存儲(chǔ)過程的設(shè)計(jì)原則存儲(chǔ)過程的設(shè)計(jì)原則用戶創(chuàng)建存儲(chǔ)過程時(shí),應(yīng)注意遵循以下幾點(diǎn)原則。用戶創(chuàng)建存儲(chǔ)過程時(shí),應(yīng)注意遵循以下幾點(diǎn)原則。n存儲(chǔ)過程

7、最大不能超過存儲(chǔ)過程最大不能超過128MB。n用戶定義的存儲(chǔ)過程只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建。用戶定義的存儲(chǔ)過程只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建。n存儲(chǔ)過程是為了處理那些需要被多次運(yùn)行的存儲(chǔ)過程是為了處理那些需要被多次運(yùn)行的Transact-SQL語句集。語句集。nSQL Server允許在存儲(chǔ)過程創(chuàng)建時(shí)引用一個(gè)不存允許在存儲(chǔ)過程創(chuàng)建時(shí)引用一個(gè)不存在的對(duì)象,系統(tǒng)只檢查創(chuàng)建存儲(chǔ)過程的語法。執(zhí)在的對(duì)象,系統(tǒng)只檢查創(chuàng)建存儲(chǔ)過程的語法。執(zhí)行時(shí),存儲(chǔ)過程引用了一個(gè)不存在的對(duì)象,則這行時(shí),存儲(chǔ)過程引用了一個(gè)不存在的對(duì)象,則這次執(zhí)行操作將會(huì)失敗。次執(zhí)行操作將會(huì)失敗。n存儲(chǔ)過程可以嵌套使用。嵌套的最大層次可以用存儲(chǔ)過程可以嵌

8、套使用。嵌套的最大層次可以用 NESTLEVEL函數(shù)來查看。函數(shù)來查看。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.1.3 常用系統(tǒng)存儲(chǔ)過程的使用常用系統(tǒng)存儲(chǔ)過程的使用SQL Server 2005提供了許多系統(tǒng)存儲(chǔ)過程提供了許多系統(tǒng)存儲(chǔ)過程,下面介紹幾種常下面介紹幾種常用的系統(tǒng)存儲(chǔ)過程。用的系統(tǒng)存儲(chǔ)過程。(1)sp_helpdb 用于查看數(shù)據(jù)庫名稱及大小。用于查看數(shù)據(jù)庫名稱及大小。(2)sp_helptext 用于顯示規(guī)則、默認(rèn)值、未加密的

9、存儲(chǔ)過用于顯示規(guī)則、默認(rèn)值、未加密的存儲(chǔ)過程、用戶定義函數(shù)、觸發(fā)器或視圖的文本。程、用戶定義函數(shù)、觸發(fā)器或視圖的文本。(3)sp_renamedb 用于重命名數(shù)據(jù)庫。用于重命名數(shù)據(jù)庫。(4)sp_rename 用于更改當(dāng)前數(shù)據(jù)庫中用戶創(chuàng)建對(duì)象(如表、用于更改當(dāng)前數(shù)據(jù)庫中用戶創(chuàng)建對(duì)象(如表、列或用戶定義數(shù)據(jù)類型)的名稱。列或用戶定義數(shù)據(jù)類型)的名稱。(5)sp_helplogins查看所有數(shù)據(jù)庫用戶登錄信息。查看所有數(shù)據(jù)庫用戶登錄信息。(6)sp_helpsrvrolemember 用于以查看所有數(shù)據(jù)庫用戶所用于以查看所有數(shù)據(jù)庫用戶所屬的角色信息。屬的角色信息。清華大學(xué)出版社清華大學(xué)出版社清華大

10、學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.2.1 創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程1使用使用SQL Server Management Studio創(chuàng)建存儲(chǔ)創(chuàng)建存儲(chǔ)過程過程利用利用SQL Server Management Studio創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程就是創(chuàng)建一個(gè)模板,通過改寫模板創(chuàng)建存儲(chǔ)過程。就是創(chuàng)建一個(gè)模板,通過改寫模板創(chuàng)建存儲(chǔ)過程。具體參考步驟如下。具體參考步驟如下。(1)啟動(dòng))啟動(dòng)SQL Server Management Studio,在對(duì),在對(duì)象資源管理器中,展

11、開象資源管理器中,展開“數(shù)據(jù)庫數(shù)據(jù)庫”| teaching |“可可編程性編程性”|“存儲(chǔ)過程存儲(chǔ)過程”。(2)如圖)如圖8.1所示,右擊所示,右擊“存儲(chǔ)過程存儲(chǔ)過程”節(jié)點(diǎn),選擇節(jié)點(diǎn),選擇“新建存儲(chǔ)過程新建存儲(chǔ)過程”菜單命令。菜單命令。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.2.1 創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程1使用使用SQL Server Management Studio創(chuàng)建存儲(chǔ)過創(chuàng)建存儲(chǔ)過程程(3)系統(tǒng)彈出存儲(chǔ)過程模板,如圖)系統(tǒng)彈出存

12、儲(chǔ)過程模板,如圖8.2所示,用戶可所示,用戶可以參照模板在其中輸入合適的以參照模板在其中輸入合適的Transact-SQL語句。語句。(4)單擊工具欄中的)單擊工具欄中的“執(zhí)行執(zhí)行”按鈕,即可將存儲(chǔ)過按鈕,即可將存儲(chǔ)過程保存在數(shù)據(jù)庫中。程保存在數(shù)據(jù)庫中。(5)刷新)刷新“存儲(chǔ)過程存儲(chǔ)過程”節(jié)點(diǎn),可以觀察到下方出現(xiàn)節(jié)點(diǎn),可以觀察到下方出現(xiàn)了新建的存儲(chǔ)過程。了新建的存儲(chǔ)過程。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.2.1 創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)

13、過程2使用使用CREATE PROCEDURE語句創(chuàng)建存儲(chǔ)過程語句創(chuàng)建存儲(chǔ)過程CREATE PROCEDURE語句的語法格式如下:語句的語法格式如下:CREATE PROC EDURE procedure_name ; number parameter_data_type VARYING = default OUTPUT ,n WITH RECOMPILE | ENCRYPTION FOR REPLICATION AS sql_statament ,n 例例8.1創(chuàng)建一個(gè)存儲(chǔ)過程,輸出所有學(xué)生的姓創(chuàng)建一個(gè)存儲(chǔ)過程,輸出所有學(xué)生的姓名、課程名稱和期末成績信息。名、課程名稱和期末成績信息。程序代碼

14、如下程序代碼如下:CREATE PROCEDURE student_scoreASSELECT sname, cname, final FROM student s ,course c ,score sc WHERE s.studentno=sc. studentno and c.courseno=sc.courseno清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.2.1 創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程例例8.2創(chuàng)建一個(gè)存儲(chǔ)過程,輸出指定學(xué)生的姓名及

15、課創(chuàng)建一個(gè)存儲(chǔ)過程,輸出指定學(xué)生的姓名及課程名稱、期末成績信息。程名稱、期末成績信息。程序代碼如下程序代碼如下:CREATE PROCEDURE student_score1 student_name nchar(8) ASSELECT sname, cname, final FROM student s ,course c ,score sc WHERE s.studentno=sc. studentno and c.courseno=sc.courseno and .sname=student_name AS sql_statament ,n 例例8.3 創(chuàng)建一個(gè)存儲(chǔ)過程,用輸出參數(shù)返回指

16、創(chuàng)建一個(gè)存儲(chǔ)過程,用輸出參數(shù)返回指定學(xué)生的所有課程的期末成績的平均值定學(xué)生的所有課程的期末成績的平均值程序代碼如下程序代碼如下:CREATE PROCEDURE student_score2 student_name nchar(8), average numeric(6,2) OUTPUT ASSELECT average=AVG(final) FROM student s ,course c ,score sc WHERE s.studentno=sc.studentno and c.courseno=sc.coursenoand s.sname=student_name例例8.4 創(chuàng)建一

17、個(gè)存儲(chǔ)過程,用輸出參數(shù)返回指定學(xué)生的所創(chuàng)建一個(gè)存儲(chǔ)過程,用輸出參數(shù)返回指定學(xué)生的所有課程的期末成績的平均值,若不指定學(xué)生姓名,則返回有課程的期末成績的平均值,若不指定學(xué)生姓名,則返回所有學(xué)生的所有課程的期末成績的平均值。所有學(xué)生的所有課程的期末成績的平均值。程序代碼如下程序代碼如下:CREATE PROCEDURE student_score3 student_name nchar(8)=NULL, average numeric(6,2) OUTPUTASSELECT average =AVG(final) FROM student s ,course c ,score sc WHERE s

18、.studentno=sc. studentno and c.courseno=sc.coursenoand (s.sname= student_name or student_name IS NULL)清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.2.2 修改存儲(chǔ)過程修改存儲(chǔ)過程1. 利用利用SQL Server Management Studio修改存儲(chǔ)過程修改存儲(chǔ)過程修改存儲(chǔ)過程的參考操作步驟如下。修改存儲(chǔ)過程的參考操作步驟如下。(1)在

19、)在“對(duì)象資源管理器對(duì)象資源管理器”中展開中展開“數(shù)據(jù)庫數(shù)據(jù)庫” | teaching |“可編程性可編程性”|“存儲(chǔ)過程存儲(chǔ)過程”。(2)右擊要修改的用戶存儲(chǔ)過程如)右擊要修改的用戶存儲(chǔ)過程如student_score,在彈出快捷菜單中選擇在彈出快捷菜單中選擇“修改修改”命令。命令。(3)在查詢編輯器中出現(xiàn)存儲(chǔ)過程的源代碼,用戶)在查詢編輯器中出現(xiàn)存儲(chǔ)過程的源代碼,用戶可以直接進(jìn)行修改??梢灾苯舆M(jìn)行修改。(4)修改完畢,執(zhí)行該存儲(chǔ)過程,將修改后的存儲(chǔ))修改完畢,執(zhí)行該存儲(chǔ)過程,將修改后的存儲(chǔ)過程保存到數(shù)據(jù)庫中。過程保存到數(shù)據(jù)庫中。 清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Ser

20、ver 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.2.2 修改存儲(chǔ)過程修改存儲(chǔ)過程2. 使用使用ALTER PROCEDURE語句修改存儲(chǔ)過程語句修改存儲(chǔ)過程使用使用ALTER PROCEDURE語句可以修改存儲(chǔ)過程。語句可以修改存儲(chǔ)過程。ALTER PROCEDURE語句的語法格式如下:語句的語法格式如下:ALTER PROC EDURE procedure_name ; number parameter_data_type VARYING = default OUTPUT ,n WITH RECOMPI

21、LE | ENCRYPTION FOR REPLICATION AS sql_statament ,n 例例8.5 修改存儲(chǔ)過程修改存儲(chǔ)過程student_score,使其以加密方式,使其以加密方式存儲(chǔ)在系統(tǒng)表存儲(chǔ)在系統(tǒng)表syscomments中。中。程序代碼如下程序代碼如下:ALTER PROCEDURE student_scoreWITH ENCRYPTIONASSELECT sname, cname, final FROM student s ,course c ,score sc WHERE s.studentno=sc. Studentno and c.courseno=sc.cou

22、rseno清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.2.3 執(zhí)行存儲(chǔ)過程執(zhí)行存儲(chǔ)過程利用利用EXECUTE 語句可以執(zhí)行存儲(chǔ)過程。對(duì)于存儲(chǔ)語句可以執(zhí)行存儲(chǔ)過程。對(duì)于存儲(chǔ)過程的所有者或任何一名對(duì)此過程擁有過程的所有者或任何一名對(duì)此過程擁有EXECUTE特權(quán)的用戶,都可以執(zhí)行此存儲(chǔ)過程。特權(quán)的用戶,都可以執(zhí)行此存儲(chǔ)過程。EXECUTE語句的語法格式如下:語句的語法格式如下: EXEC UTE return_status = procedure_

23、name ; number parameter1 = value | parameter1=variable OUTPUT . WITH RECOMPILE 例例8.6 執(zhí)行存儲(chǔ)過程執(zhí)行存儲(chǔ)過程student_score2。分析:由于該存儲(chǔ)過程有輸出參數(shù),那么必須在執(zhí)分析:由于該存儲(chǔ)過程有輸出參數(shù),那么必須在執(zhí)行存儲(chǔ)過程前定義一個(gè)變量,以接收存儲(chǔ)過程要傳行存儲(chǔ)過程前定義一個(gè)變量,以接收存儲(chǔ)過程要傳出的值。然后可以使用如下語句輸出變量出的值。然后可以使用如下語句輸出變量ave的值。的值。程序代碼如下程序代碼如下:DECLARE ave numeric(6,2)EXEC student_score

24、2 student_name=何影何影, average =ave OUTPUTSELECT ave例例8.7 使用默認(rèn)值執(zhí)行的存儲(chǔ)過程使用默認(rèn)值執(zhí)行的存儲(chǔ)過程student_score3。程序代碼如下程序代碼如下:DECLARE ave numeric(6,2)EXEC student_score3 average =ave OUTPUTSELECT ave清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) n觸發(fā)器(觸發(fā)器(Trigger)是一種響應(yīng)

25、數(shù)據(jù)操作語)是一種響應(yīng)數(shù)據(jù)操作語言(言(DML)事件或數(shù)據(jù)定義語言()事件或數(shù)據(jù)定義語言(DDL)事件而執(zhí)行的特殊類型的存儲(chǔ)過程,是在事件而執(zhí)行的特殊類型的存儲(chǔ)過程,是在用戶對(duì)某一表中的數(shù)據(jù)進(jìn)行用戶對(duì)某一表中的數(shù)據(jù)進(jìn)行UPDATE、INSERT和和DELETE操作時(shí)被觸發(fā)執(zhí)行的操作時(shí)被觸發(fā)執(zhí)行的一段程序。一段程序。n觸發(fā)器有助于強(qiáng)制引用完整性,以便在添觸發(fā)器有助于強(qiáng)制引用完整性,以便在添加、更新或刪除表中的行時(shí)保留表之間已加、更新或刪除表中的行時(shí)保留表之間已定義的關(guān)系。定義的關(guān)系。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005.

26、SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.3.1 觸發(fā)器的作用觸發(fā)器的作用觸發(fā)器可以實(shí)現(xiàn)由主鍵和外鍵所不能保證的觸發(fā)器可以實(shí)現(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)一致性。復(fù)雜的參照完整性和數(shù)據(jù)一致性。(1)觸發(fā)器的主要作用。)觸發(fā)器的主要作用。n觸發(fā)器可以對(duì)數(shù)據(jù)庫進(jìn)行級(jí)聯(lián)修改。觸發(fā)器可以對(duì)數(shù)據(jù)庫進(jìn)行級(jí)聯(lián)修改。n實(shí)現(xiàn)比實(shí)現(xiàn)比CHECK約束更為復(fù)雜的限制。約束更為復(fù)雜的限制。n強(qiáng)制表的修改要合乎業(yè)務(wù)規(guī)則。強(qiáng)制表的修改要合乎業(yè)務(wù)規(guī)則。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. S

27、QL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.3.1 觸發(fā)器的作用觸發(fā)器的作用(2)使用觸發(fā)器的優(yōu)點(diǎn)。)使用觸發(fā)器的優(yōu)點(diǎn)。 n觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)更改。觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)更改。n觸發(fā)器可以強(qiáng)制比用觸發(fā)器可以強(qiáng)制比用CHECK約束定義的約束約束定義的約束更為復(fù)雜的約束。更為復(fù)雜的約束。 n觸發(fā)器也可以監(jiān)測數(shù)據(jù)修改前后的表狀態(tài),并觸發(fā)器也可以監(jiān)測數(shù)據(jù)修改前后的表狀態(tài),并根據(jù)其差異采取對(duì)策。根據(jù)其差異采取對(duì)策。n一個(gè)表中的多個(gè)同類觸發(fā)器(一個(gè)表中的多個(gè)同類觸發(fā)器(INSERT、UPDATE 或或 DELETE)允許采取多個(gè)不同的)

28、允許采取多個(gè)不同的對(duì)策以響應(yīng)同一個(gè)修改語句。對(duì)策以響應(yīng)同一個(gè)修改語句。 清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.3.2 觸發(fā)器的分類觸發(fā)器的分類兩種類型的觸發(fā)器:兩種類型的觸發(fā)器:DML觸發(fā)器和觸發(fā)器和DDL觸發(fā)器。觸發(fā)器。1. DML觸發(fā)器觸發(fā)器nDML觸發(fā)器是在執(zhí)行觸發(fā)器是在執(zhí)行INSERT、UPDATE或或DELETE語語句時(shí)被激活的觸發(fā)器。句時(shí)被激活的觸發(fā)器。nDML觸發(fā)器又分為觸發(fā)器又分為AFTER和和INSTEAD OF兩種觸

29、發(fā)器兩種觸發(fā)器:nAFTER 觸發(fā)器是在激活它的語句執(zhí)行成功后才激活觸發(fā)器是在激活它的語句執(zhí)行成功后才激活.nINSTEAD OF觸發(fā)器的激活將替代相應(yīng)的觸發(fā)語句。觸發(fā)器的激活將替代相應(yīng)的觸發(fā)語句。n當(dāng)數(shù)據(jù)庫中發(fā)生數(shù)據(jù)操作語言(當(dāng)數(shù)據(jù)庫中發(fā)生數(shù)據(jù)操作語言(DML)事件時(shí)將調(diào)用)事件時(shí)將調(diào)用 DML 觸發(fā)器。觸發(fā)器。DML 觸發(fā)器可以查詢其他表,還可以包觸發(fā)器可以查詢其他表,還可以包含復(fù)雜的含復(fù)雜的 Transact-SQL 語句。將觸發(fā)器和觸發(fā)它的語句語句。將觸發(fā)器和觸發(fā)它的語句作為可在觸發(fā)器內(nèi)回滾的單個(gè)事務(wù)對(duì)待。如果檢測到錯(cuò)作為可在觸發(fā)器內(nèi)回滾的單個(gè)事務(wù)對(duì)待。如果檢測到錯(cuò)誤誤,則整個(gè)事務(wù)即自

30、動(dòng)回滾。則整個(gè)事務(wù)即自動(dòng)回滾。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.3.2 觸發(fā)器的分類觸發(fā)器的分類。1. DML觸發(fā)器觸發(fā)器: DML 觸發(fā)器通常用于以下場合:觸發(fā)器通常用于以下場合: nDML 觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)更改。觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)更改。nDML 觸發(fā)器可以防止惡意或錯(cuò)誤的觸發(fā)器可以防止惡意或錯(cuò)誤的 INSERT、UPDATE 以及以及 DELETE 操作,并強(qiáng)制執(zhí)行比操作,并強(qiáng)制執(zhí)行比 CH

31、ECK 約束定義的約束定義的限制更為復(fù)雜的其他限制。限制更為復(fù)雜的其他限制。 n與與 CHECK 約束不同,約束不同,DML 觸發(fā)器可引用其他表中的列。觸發(fā)器可引用其他表中的列。nDML 觸發(fā)器可以評(píng)估數(shù)據(jù)修改前后表的狀態(tài),并根據(jù)該差觸發(fā)器可以評(píng)估數(shù)據(jù)修改前后表的狀態(tài),并根據(jù)該差異采取措施。異采取措施。n一個(gè)表中的多個(gè)同類一個(gè)表中的多個(gè)同類DML觸發(fā)器允許采取多個(gè)不同的操作觸發(fā)器允許采取多個(gè)不同的操作來響應(yīng)同一個(gè)修改語句。來響應(yīng)同一個(gè)修改語句。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)

32、用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.3.2 觸發(fā)器的分類觸發(fā)器的分類。2. DDL觸發(fā)器觸發(fā)器DDL觸發(fā)器是在執(zhí)行觸發(fā)器是在執(zhí)行CREATE、ALTER和和DROP語語句時(shí)被激活的觸發(fā)器,是由數(shù)據(jù)定義語言引起的。句時(shí)被激活的觸發(fā)器,是由數(shù)據(jù)定義語言引起的。如果要執(zhí)行以下操作,可以使用如果要執(zhí)行以下操作,可以使用DDL觸發(fā)器:觸發(fā)器: n要防止對(duì)數(shù)據(jù)庫架構(gòu)進(jìn)行某些更改。要防止對(duì)數(shù)據(jù)庫架構(gòu)進(jìn)行某些更改。n希望數(shù)據(jù)庫中發(fā)生某種情況以響應(yīng)數(shù)據(jù)庫架構(gòu)希望數(shù)據(jù)庫中發(fā)生某種情況以響應(yīng)數(shù)據(jù)庫架構(gòu)中的更改。中的更改。 n要記錄數(shù)據(jù)庫架構(gòu)中的更改或事件。要記錄數(shù)據(jù)庫架構(gòu)中的更改或事件。n僅在運(yùn)行觸發(fā)僅在

33、運(yùn)行觸發(fā) DDL 觸發(fā)器的觸發(fā)器的 DDL 語句后,語句后,DDL 觸發(fā)器才會(huì)激發(fā)。觸發(fā)器才會(huì)激發(fā)。DDL 觸發(fā)器無法作為觸發(fā)器無法作為 INSTEAD OF 觸發(fā)器使用。觸發(fā)器使用。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.3.3 觸發(fā)器的工作原理觸發(fā)器的工作原理n在觸發(fā)器的執(zhí)行過程中,在觸發(fā)器的執(zhí)行過程中,SQL Server為每個(gè)觸發(fā)器創(chuàng)建和為每個(gè)觸發(fā)器創(chuàng)建和管理兩個(gè)特殊的表,一個(gè)是插入表管理兩個(gè)特殊的表,一個(gè)是插入表inserted

34、表,一個(gè)是刪除表,一個(gè)是刪除表表deleted表。這兩個(gè)表建在數(shù)據(jù)庫服務(wù)器的內(nèi)存中,與觸表。這兩個(gè)表建在數(shù)據(jù)庫服務(wù)器的內(nèi)存中,與觸發(fā)器所在數(shù)據(jù)表的結(jié)構(gòu)是完全一致。發(fā)器所在數(shù)據(jù)表的結(jié)構(gòu)是完全一致。n當(dāng)由當(dāng)由INSERT或或UPDATE語句激活相應(yīng)觸發(fā)器之后,所有語句激活相應(yīng)觸發(fā)器之后,所有被添加或被更新的記錄都被存儲(chǔ)到被添加或被更新的記錄都被存儲(chǔ)到inserted表。當(dāng)由表。當(dāng)由DELETE或或UPDATE語句激活相應(yīng)觸發(fā)器之后,所有被刪語句激活相應(yīng)觸發(fā)器之后,所有被刪除的記錄都被送到除的記錄都被送到deleted表。表。n在觸發(fā)器的執(zhí)行過程中,可以讀取這兩個(gè)表中的內(nèi)容,但在觸發(fā)器的執(zhí)行過程中,

35、可以讀取這兩個(gè)表中的內(nèi)容,但不能修改它們。當(dāng)觸發(fā)器的工作完成之后,這兩個(gè)表也將不能修改它們。當(dāng)觸發(fā)器的工作完成之后,這兩個(gè)表也將從內(nèi)存中刪除。從內(nèi)存中刪除。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.3.4 創(chuàng)建觸發(fā)器前應(yīng)該注意的問題創(chuàng)建觸發(fā)器前應(yīng)該注意的問題在創(chuàng)建觸發(fā)器前,需要注意以下一些問題:在創(chuàng)建觸發(fā)器前,需要注意以下一些問題:nCREATE TRIGGER 語句必須是批處理中的第一個(gè)語句,語句必須是批處理中的第一個(gè)語句,而且只能用于一

36、個(gè)表或視圖。而且只能用于一個(gè)表或視圖。n創(chuàng)建觸發(fā)器的權(quán)限默認(rèn)分配給表的所有者,且不能將該權(quán)創(chuàng)建觸發(fā)器的權(quán)限默認(rèn)分配給表的所有者,且不能將該權(quán)限轉(zhuǎn)給其他用戶。限轉(zhuǎn)給其他用戶。n觸發(fā)器可以引用當(dāng)前數(shù)據(jù)庫以外的對(duì)象,但只能在當(dāng)前數(shù)觸發(fā)器可以引用當(dāng)前數(shù)據(jù)庫以外的對(duì)象,但只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建觸發(fā)器。據(jù)庫中創(chuàng)建觸發(fā)器。n不能在臨時(shí)表或系統(tǒng)表上創(chuàng)建觸發(fā)器,但是觸發(fā)器可以引不能在臨時(shí)表或系統(tǒng)表上創(chuàng)建觸發(fā)器,但是觸發(fā)器可以引用臨時(shí)表。不應(yīng)引用系統(tǒng)表,而應(yīng)使用信息架構(gòu)視圖。用臨時(shí)表。不應(yīng)引用系統(tǒng)表,而應(yīng)使用信息架構(gòu)視圖。n在含有用在含有用 DELETE或或UPDATE操作定義的外鍵的表中,不操作定義的外鍵的表中

37、,不能定義能定義INSTEAD OF和和 INSTEAD OF UPDATE觸發(fā)器。觸發(fā)器。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.4.1 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器可以通過創(chuàng)建觸發(fā)器可以通過SQL Server Management Studio和和CREATE TRIGGER語句兩種方法。語句兩種方法。創(chuàng)建觸發(fā)器時(shí)需要指定如下的選項(xiàng):創(chuàng)建觸發(fā)器時(shí)需要指定如下的選項(xiàng): n觸發(fā)器名稱和需要定義觸發(fā)器的表。觸發(fā)器名稱和需要定義觸發(fā)器的表

38、。n觸發(fā)器將何時(shí)激發(fā)。觸發(fā)器將何時(shí)激發(fā)。n激活觸發(fā)器的數(shù)據(jù)修改語句。有效選項(xiàng)為激活觸發(fā)器的數(shù)據(jù)修改語句。有效選項(xiàng)為INSERT、UPDATE或或 DELETE。多個(gè)數(shù)據(jù)修。多個(gè)數(shù)據(jù)修改語句可激活同一個(gè)觸發(fā)器。改語句可激活同一個(gè)觸發(fā)器。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.4.1 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器1. 在在SQL Server Management Studio中創(chuàng)建觸發(fā)器中創(chuàng)建觸發(fā)器(1)啟動(dòng))啟動(dòng)SQL Server Manage

39、ment Studio,在,在“對(duì)象資源管理器對(duì)象資源管理器”中展開中展開“數(shù)據(jù)數(shù)據(jù)庫庫”|teaching|“表表” 。(2)選擇要?jiǎng)?chuàng)建觸發(fā)器的表)選擇要?jiǎng)?chuàng)建觸發(fā)器的表student并展開。右單并展開。右單“觸發(fā)器觸發(fā)器”節(jié)點(diǎn),在彈出的快捷菜單中選擇節(jié)點(diǎn),在彈出的快捷菜單中選擇“新新建觸發(fā)器建觸發(fā)器”命令。命令。(3)此時(shí)彈出如圖)此時(shí)彈出如圖8.4所示的新建觸發(fā)器編輯窗口,所示的新建觸發(fā)器編輯窗口,其中包含觸發(fā)器模板,用戶可以參照模板在其中其中包含觸發(fā)器模板,用戶可以參照模板在其中輸入觸發(fā)器的輸入觸發(fā)器的Transact-SQL語句。語句。(4)單擊工具欄中的)單擊工具欄中的“!”執(zhí)行按鈕

40、,將觸發(fā)器執(zhí)行按鈕,將觸發(fā)器保存到數(shù)據(jù)庫中。保存到數(shù)據(jù)庫中。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.4.1 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器2. 使用使用CREATE TRIGGER語句創(chuàng)建觸發(fā)器語句創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器的語法格式如下:創(chuàng)建觸發(fā)器的語法格式如下:CREATE TRIGGER trigger_name ON table | view WITH ENCRYPTION FOR | AFTER | INSTEAD OF INSERT , UP

41、DATE , DELETE AS sql_statament ,n 例例8.8 為為student表創(chuàng)建一個(gè)觸發(fā)器,用來禁止表創(chuàng)建一個(gè)觸發(fā)器,用來禁止更新學(xué)號(hào)字段的值。更新學(xué)號(hào)字段的值。程序代碼如下程序代碼如下:CREATE TRIGGER update_s_tr ON student AFTER UPDATEASIF UPDATE(studentno) BEGIN RAISERROR(不能修改學(xué)號(hào)不能修改學(xué)號(hào),16,2) ROLLBACKEND此時(shí),若有更新語句如下:此時(shí),若有更新語句如下:UPDATE student SET studentno=0837221508WHERE studen

42、tno=0937221508則提示則提示“不能修改學(xué)號(hào)不能修改學(xué)號(hào)”, 更新語句得不更新語句得不到執(zhí)行。到執(zhí)行。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.4.1 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器例例8.9 為為course表創(chuàng)建一個(gè)觸發(fā)器,用來防止用戶刪除任何表創(chuàng)建一個(gè)觸發(fā)器,用來防止用戶刪除任何必修課程的課程記錄。必修課程的課程記錄。程序代碼如下程序代碼如下:CREATE TRIGGER delete_c_tr ON courseINSTEAD OF

43、 DELETE ASIF EXISTS ( SELECT * FROM course WHERE type=必修必修 ) BEGIN RAISERROR(不能刪除必修課程不能刪除必修課程,16,2) ROLLBACK END此時(shí),若刪除新語句如下:此時(shí),若刪除新語句如下:DELETE FORM course WHERE type=必修必修則提示則提示“不能刪除必修課程不能刪除必修課程”,刪除語句,刪除語句得不到執(zhí)行。得不到執(zhí)行。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)

44、用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.4.1 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器例例8.10 為為score表創(chuàng)建一個(gè)觸發(fā)器,用來防止用戶對(duì)表創(chuàng)建一個(gè)觸發(fā)器,用來防止用戶對(duì)score表表中的數(shù)據(jù)進(jìn)行任何修改。中的數(shù)據(jù)進(jìn)行任何修改。程序代碼如下程序代碼如下:CREATE TRIGGER update_sc_tr ON scoreINSTEAD OF UPDATEASRAISERROR(不能修改成績表中的數(shù)據(jù)不能修改成績表中的數(shù)據(jù),16,2)此時(shí),若有更新語句如下此時(shí),若有更新語句如下:UPDATE score SET final=60則提示則提示“不能修改成績表中的數(shù)據(jù)不能修改成績表中的數(shù)據(jù)”,更新語句得不到執(zhí),更新

45、語句得不到執(zhí)行。行。同一個(gè)觸發(fā)器。同一個(gè)觸發(fā)器。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.4.2 修改觸發(fā)器修改觸發(fā)器1. 使用使用SQL Server Management Studio修改觸發(fā)器修改觸發(fā)器修改觸發(fā)器的操作步驟如下。修改觸發(fā)器的操作步驟如下。(1)在)在“對(duì)象資源管理器對(duì)象資源管理器”中展開中展開“數(shù)據(jù)庫數(shù)據(jù)庫”。(2)選擇觸發(fā)器所在的數(shù)據(jù)庫,如)選擇觸發(fā)器所在的數(shù)據(jù)庫,如teaching數(shù)據(jù)庫,并展數(shù)據(jù)庫,并展開該數(shù)據(jù)庫

46、的開該數(shù)據(jù)庫的“表表”節(jié)點(diǎn)。節(jié)點(diǎn)。(3)選擇觸發(fā)器所在的表)選擇觸發(fā)器所在的表score,展開表中的,展開表中的“觸發(fā)器觸發(fā)器”。(4)右擊要修改的觸發(fā)器,在彈出的快捷菜單中選擇)右擊要修改的觸發(fā)器,在彈出的快捷菜單中選擇“修修改改”命令。命令。(5)在彈出的觸發(fā)器編輯窗口,用戶可以直接進(jìn)行修改。)在彈出的觸發(fā)器編輯窗口,用戶可以直接進(jìn)行修改。修改完畢,單擊工具欄中的修改完畢,單擊工具欄中的“!”按鈕執(zhí)行該觸發(fā)器,按鈕執(zhí)行該觸發(fā)器,將修改后的觸發(fā)器保存到數(shù)據(jù)庫中。將修改后的觸發(fā)器保存到數(shù)據(jù)庫中。清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server

47、 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.4.2 修改觸發(fā)器修改觸發(fā)器2. 使用使用ALTER TRIGGER語句修改觸發(fā)器語句修改觸發(fā)器ALTER TRIGGER語句的語法格式如下:語句的語法格式如下:ALTER TRIGGER trigger_name ON table | view WITH ENCRYPTION FOR | AFTER | INSTEAD OFINSERT, UPDATE , DELETE AS sql_statament ,n 例例8.11 使用使用ALTER TRIGGER語句修改觸發(fā)器語句修改觸發(fā)器updat

48、e_s_tr,用來禁止更新學(xué)號(hào)字段和姓名字段的值。,用來禁止更新學(xué)號(hào)字段和姓名字段的值。程序代碼如下程序代碼如下:ALTER TRIGGER update_s_tr ON student AFTER UPDATEASIF UPDATE(studentno) OR UPDATE(sname) BEGIN RAISERROR(不能修改學(xué)號(hào)或姓名不能修改學(xué)號(hào)或姓名,16,2) ROLLBACK END清華大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社. SQL Server 2005. SQL Server 2005. SQL Server 2005數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā)數(shù)據(jù)庫應(yīng)用與開發(fā) 8.4.3 刪除觸

溫馨提示

  • 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)論