SQL Sever觸發(fā)器_第1頁
SQL Sever觸發(fā)器_第2頁
SQL Sever觸發(fā)器_第3頁
SQL Sever觸發(fā)器_第4頁
SQL Sever觸發(fā)器_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、SQL Sever觸發(fā)器一、觸發(fā)器概述1、觸發(fā)器是一種特殊類型的存儲過程,當(dāng)表中數(shù)據(jù)被更新時,SQLServer自動執(zhí)行觸發(fā)器。2、使用觸發(fā)器可以實施更為復(fù)雜的數(shù)據(jù)完整性約束。在同一數(shù)據(jù)庫中的簡單參照完整性常通過PRIMARY KEY約束和FOREIGN KEY約束來實現(xiàn)。但參照完整性約束不能參照其他數(shù)據(jù)庫中的對象; 而觸發(fā)器可跨數(shù)據(jù)庫的參照完整性約束只能通過觸發(fā)器來實現(xiàn)。CHECK約束只能引用當(dāng)前列(列級CHECK約束)或當(dāng)前表(表級CHECK約束)中的列值,而觸發(fā)器則可引用其他表中的列值。 3、CREATE TRIGGER語句建立觸發(fā)器,它說明一個觸發(fā)器的觸發(fā)表。觸發(fā)操作事件名稱和觸發(fā)器所

2、執(zhí)行的操作。觸發(fā)器是一種特殊的存儲過程,它不允許帶參數(shù),也不能被直接調(diào)用,而只能由系統(tǒng)自動觸發(fā)執(zhí)行。 SQL Server提供以下兩種觸發(fā)方式: 后觸發(fā):在觸發(fā)操作(INSERT、 UPDATE或DELETE)執(zhí)行完成,并處理過所有約束后激活觸發(fā)器,這種方式稱為后觸發(fā)。如果觸發(fā)操作違反約束條件,將導(dǎo)致事務(wù)回滾,這時就不會執(zhí)行后觸發(fā)器。但在視圖上不能采用后觸發(fā)方式定義觸發(fā)器。替代觸發(fā):當(dāng)觸發(fā)操作發(fā)生時,不是執(zhí)行的觸發(fā)的SQL語句,從而替代觸發(fā)語句的操作。在表和視圖中,每個INSERT、UPDATE或DELETE最多可以定義一個INSTEAD OF觸發(fā)器。數(shù)據(jù)庫引擎首先創(chuàng)建臨時inserted表和

3、deleted表,之后,SQL Server停止執(zhí)行通常的操作,而轉(zhuǎn)去執(zhí)行替代觸發(fā)器。二、建立觸發(fā)器在企業(yè)管理其使用CREATE TRIGGER語句創(chuàng)建觸發(fā)器,CREATE TRIGGER格式為:CREATETRIGGER trigger_nameON table | view WITH ENCRYPTION FOR | AFTER | INSTEAD OF INSERT , UPDATE WITH APPEND NOT FOR REPLICATION AS IF UPDATE ( column ) AND | OR UPDATE ( column ) .n |IF ( COLUMNS_UPD

4、ATED ( ) bitwise_operator updated_bitmask ) comparison_operator column_bitmask .n sql_statement .n 在CREATE TRIGGER語句中,triggername為所建立的觸發(fā)器名稱。它必須遵守SQL Server標(biāo)識符命名規(guī)則,并且在一個數(shù)據(jù)庫中,觸發(fā)器名稱必須保持唯一。 table為引發(fā)觸發(fā)器的表名稱,這些表內(nèi)的數(shù)據(jù)更新操作將激活觸發(fā)器。所以,又將這些表稱作觸發(fā)器表。 SQL Server將觸發(fā)器的定義文本存儲在syscomments系統(tǒng)表中,使用WITH ENCRYPTION選項要求SQL S

5、erver對觸發(fā)器定義文本進行加密存儲,這樣能夠防止他人從syscomments系統(tǒng)表中直接檢索或調(diào)用系統(tǒng)存儲過程間接讀取觸發(fā)器定義信息。 FOR和AFTER說明CREATE TRIGGER語句所創(chuàng)建的觸發(fā)器為后觸發(fā)器。 INSERT、UPDATE和DELETE定義觸發(fā)器的觸發(fā)操作事件,一個觸發(fā)器由表中的多個事件所觸發(fā)時,使用INSERT、 DELETE和UPDATE的組合表示,它們相互之間用逗號分隔。 NOT FORREPLICATION選項說明當(dāng)復(fù)制進程修改觸發(fā)表中的數(shù)據(jù)時,不激活所建立的觸發(fā)器。 AS于句中的SQL_statemelnts參數(shù)為單個SQL語句或語句塊,它定義當(dāng)觸發(fā)事件發(fā)生

6、時,觸發(fā)器所執(zhí)行的操作。在觸發(fā)器定義中不能包含以下TransactSOL語句: CREATE DATABASE、ALTER DATABASE、DROP DATABASE等命令。 在CREATE TRRGGER語句中,如果觸發(fā)事件為INSERT或UPDATE操作,可以使用IF子句進一步限制觸發(fā)器的觸發(fā)條件,指出只有當(dāng)指定列的列值被修改時,才激活觸發(fā)器,從而創(chuàng)建條件插入觸發(fā)器或條件修改觸發(fā)器。 在IF子句中可以使用以下兩種格式指出激活條件觸發(fā)器的被修改列 UPDATE (列名)AND OR UPDATE(列名) n和 (COLUMNS_UPDATE ()位運算符updated_bitmask) 第

7、一種方式直接指定激活觸發(fā)器的被修改列名,而第二種方式則用列的位掩碼和比較表達式的方式說明激活觸發(fā)器的被修改列。其中COLUMNS為觸發(fā)表中的列名,它說明這一列中的數(shù)據(jù)被INSERT或UPDATE操作改變時激活觸發(fā)器。 column所指定列可以是SQL Server支持的所有數(shù)據(jù)類型,但不能為計算列。例8.1:創(chuàng)建UPDATE觸發(fā)器Create trigger lsq1_trigon sfor updateasprint the table s was updated執(zhí)行下述修改語句:update sset sname=原料公司分公司where sno=s1系統(tǒng)自動激發(fā)觸發(fā)器,因此將返回信息“t

8、he table s was updated”。例8.2:創(chuàng)建INSERT觸發(fā)器Create trigger lsq2_trigon sfor insertasprint the table s was inserted執(zhí)行下述插入語句:insert into svalues(s13,西安印刷廠,79,咸寧路123號)例8.3:創(chuàng)建DELETE觸發(fā)器create trigger lsq_deleteon sfor deleteasdelete sprint the table s was deleted當(dāng)執(zhí)行delete 會出現(xiàn)“the table s wasdeleted”8.2 修改觸發(fā)器

9、定義使用ALTER TRIGGER可以更改原來由 CREATE TRIGGER 語句創(chuàng)建的觸發(fā)器定義。有關(guān) ALTER TRIGGER 語句所用參數(shù)的更多信息,請參見CREATE TRIGGER。 如:ALTER TRIGGER lsq1_trig on s8.3 刪除觸發(fā)器定義如果不再需要某個觸發(fā)器,可以將其刪除。通過使用DROP TRIGGER語句,即可從從當(dāng)前數(shù)據(jù)庫表中刪除觸發(fā)器。 DROPTRIGGER語句的命令格式為:DROP TRIGGER觸發(fā)器名8.4 查看觸發(fā)器若要查看某一特定表上現(xiàn)有的觸發(fā)器,請使用命令l sp_helptrigger 數(shù)據(jù)表名例如:sp_helptrigge

10、r s命令用來查看S數(shù)據(jù)表中已經(jīng)建立好的觸發(fā)器。 使用命令:sp_helptext 觸發(fā)器名,可以查看已經(jīng)建好的觸發(fā)器代碼。 圖22 觸發(fā)器屬性窗口如命令:sp_helptext lsq1_trig,查看已經(jīng)建好的觸發(fā)器lsq1_trig中的代碼 其實無論是建立、修改、刪除還是查看觸發(fā)器、觸發(fā)器代碼,均可以通過SQL Sever的“企業(yè)管理器”實現(xiàn),具體的步驟為:l右鍵單擊數(shù)據(jù)表名,在彈出的快捷菜單中選擇“所有任務(wù)”,執(zhí)行“管理觸發(fā)器”命令,如圖22。l在名稱框中選擇已經(jīng)存在的觸發(fā)器過程或新建一個新的觸發(fā)器。l若為新建一個觸發(fā)器,則在“文本”中顯示定義觸發(fā)器的模板,若選擇一個已經(jīng)存在的觸發(fā)器名,則在“文本”中顯示定義觸發(fā)器的代碼,可以進行任意編輯,實現(xiàn)修改的目的。l也可以單擊“刪除”按鈕,則刪除一個觸發(fā)器的定義。8.5 觸發(fā)器的啟用和禁用通過Alter table 語句,可以啟用或禁用觸發(fā)器,而無需從表中刪除觸發(fā)器的定義。由于每個觸發(fā)器都是在某一表中定義的,因此可以使用AlterTable 語句,而不是使用Alter

溫馨提示

  • 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

提交評論