1.6 SQL Server 2000觸發器管理在資料庫的管理和維護中,保證資料庫中資料庫的完整性是至關重要的。觸發器是一種實施複雜的完整性條件約束的特殊預存程序。當使用INSERT、DELETE、UPDATE命令對觸發器所保護的資料進行修改時,它能被系統自動啟用,用來防止對資料進行不正確、未授權或不一致的修改。觸發器不同於一般的預存程序,它不可以使用EXECUTE語句來執行。下面我們來介紹一下如何建立、修改和刪除預存程序。
1.6.1 建立觸發器在建立預存程序的時候,要考慮下列以下因素。● CREATE TRIGGER語句必須是批處理中的第一個語句。將該批處理中隨後的其他所有語句解釋為CREATE TRIGGER語句定義的一部分。● 建立觸發器的許可權預設分配給表的所有者,且不能將該許可權轉給其他使用者。● 觸發器為資料庫物件,其名稱必須遵循標識符的命名規則。● 雖然觸發器可以引用當前資料庫以外的對象,但只能在當前資料庫中建立觸發器。在企業管理器中,展開指定執行個體的資料庫,然後單擊“表”檔案夾。在詳細資料窗格中,右擊將在其上建立觸發器的表,指向“所有任務”菜單,然後選擇“管理觸發器”命令,開啟“觸發器屬性”對話方塊,4-21所示。圖4-21 觸發器屬性在“名稱”下拉式清單方塊中,選擇“建立”清單項目。在“文本”框中輸入觸發器的文本。用Ctrl+Tab鍵來縮排觸發器的文本。在建立觸發器時,應考慮:● 名稱。● 在其上定義觸發器的表。● 觸發器何時激發。● 啟用觸發器的資料修改語句。有效選項為INSERT、UPDATE或DELETE。多個資料修改語句可啟用同一個觸發器。例如,觸發器可由INSERT或UPDATE語句啟用。● 執行觸發操作的編程語句。 輸入完畢後,單擊“檢查文法”按鈕,檢查文法是否正確,系統會出現提示資訊。如果提示正確,單擊“確定”按鈕,完成觸發器的建立。使用CREATE TRIGGER建立觸發器的文法形式如下: CREATE TRIGGER
trigger_nameON{
table |
view}[WITH ENCRYPTION] { FOR | AFTER | INSTEAD OF} { [ INSERT] [, ] [ UPDATE ] [, ] [ DELETE] }AS[ { IF UPDATE(
column)…][ { AND | OR } UPDATE(
column)…]
sql_statement […n]其中各參數說明如下。●
trigger_name:用於指定要建立的觸發器的名稱。 ●
table |
view:是在其上執行觸發器的表或視圖,有時稱為觸發器表或觸發器視圖。可以選擇是否指定表或視圖的所有者名稱。● { [ INSERT] [, ] [ UPDATE ] [, ] [ DELETE] }:指定在表或視圖上執行哪些資料修改語句時將啟用觸發器的關鍵字。必須至少指定一個選項。在觸發器定義中允許使用以任意順序組合的這些關鍵字。如果指定的選項多於一個,需用逗號分隔這些選項。● IF UPDATE(
column):測試在指定的列上進行的INSERT或UPDATE操作,不能用於DELETE操作。 ●
sql_statement:觸發器在被觸發之後所執行的資料庫操作,可包含任意數量的SQL語句。 例如,建立觸發器tg_InsertStudents,用於防止向表StudentsInfo中插入資料,其文法如下:CREATE TRIGGER tg_InsertStudents ON StudentsInfoFOR INSERTAS RAISERROR(’unauthorized’,10,1) ROLLBACK TRANGO此後,當使用者向表StudentsInfo中插入資料時將觸發觸發器,其文法如下:INSERT INTO StudentsInfo(Stu_Id, Sname, Sgender, Sage, Sdpt) VALUES('994108', '董剛', '男', 20, '電腦系')
1.6.2 修改觸發器觸發器可以根據使用者的要求或者基表定義的改變而改變。讀者可以在“觸發器屬性”對話方塊中修改觸發器。也可以使用ALTER TRIGGER語句更改先前通過執行CREATE TRIGGER語句建立的觸發器,但不會更改許可權,也不影響相關的預存程序或觸發器。其文法形式如下:ALTER TRIGGER
trigger_name[;number]ON{
table |
view}[WITH ENCRYPTION]{ FOR | AFTER | INSTEAD OF} { [ INSERT] [, ] [ UPDATE ] [, ] [ DELETE] }AS[ { IF UPDATE(
column)…][ { AND | OR } UPDATE(
column)…]
sql_statement […n]其中,各參數的含義與建立觸發器時所使用的基本相同,這裡就不再重複了。
1.6.3 刪除觸發器讀者可以在企業管理器中刪除觸發器:右擊要刪除的觸發器,並在彈出的捷徑功能表中選擇“刪除”命令。刪除觸發器也可以使用DROP命令,DROP命令可以將一個或者多個觸發器或者觸發器組從當前資料庫中刪除,其文法形式如下:drop TRIGGER{
trigger _name } [,…n]其中,
trigger_name用於指定要刪除的觸發器名稱。另外,可以使用該命令同時刪除多個觸發器,只需在要刪除的觸發器名稱之間用逗號隔開即可。例如,刪除表StudentsInfo中名為_ShowStudents的觸發器,其文法如下:DROP TRIGGER tg_InsertStudents