SqlServer包括三種常規(guī)類型的觸發(fā)器:DML觸發(fā)器、DDL觸發(fā)器和登錄觸發(fā)器。
1.DML(數(shù)據(jù)操作語言,Data?Manipulation?Language)觸發(fā)器
?DML觸發(fā)器是一些附加在特定表或視圖上的操作代碼,當數(shù)據(jù)庫服務(wù)器中發(fā)生數(shù)據(jù)操作語言事件時執(zhí)行這些操作。SqlServer中的DML觸發(fā)器有三種:
1、insert觸發(fā)器:向表中插入數(shù)據(jù)時被觸發(fā);
2、delete觸發(fā)器:從表中刪除數(shù)據(jù)時被觸發(fā);
3、update觸發(fā)器:修改表中數(shù)據(jù)時被觸發(fā)。
2.DDL(數(shù)據(jù)定義語言,Data?Definition?Language)觸發(fā)器
?DDL觸發(fā)器是當服務(wù)器或者數(shù)據(jù)庫中發(fā)生數(shù)據(jù)定義語言(主要是以create,drop,alter開頭的語句)事件時被激活使用,使用DDL觸發(fā)器可以防止對數(shù)據(jù)架構(gòu)進行的某些更改或記錄數(shù)據(jù)中的更改或事件操作
3.登錄觸發(fā)器
????登錄觸發(fā)器將為響應?LOGIN?事件而激發(fā)存儲過程。與?SQL?Server?實例建立用戶會話時將引發(fā)此事件。登錄觸發(fā)器將在登錄的身份驗證階段完成之后且用戶會話實際建立之前激發(fā)。因此,來自觸發(fā)器內(nèi)部且通常將到達用戶的所有消息(例如錯誤消息和來自?PRINT?語句的消息)會傳送到?SQL?Server?錯誤日志。如果身份驗證失敗,將不激發(fā)登錄觸發(fā)器。
4.觸發(fā)器工作原理:
觸發(fā)器觸發(fā)時:
????????系統(tǒng)自動在內(nèi)存中創(chuàng)建deleted表或inserted表;
????????只讀,不允許修改,觸發(fā)器執(zhí)行完成后,自動刪除。
inserted表:
????????臨時保存了插入或更新后的記錄行;
????????可以從inserted表中檢查插入的數(shù)據(jù)是否滿足業(yè)務(wù)需求;
????????如果不滿足,則向用戶發(fā)送報告錯誤消息,并回滾插入操作。
deleted表:
????????臨時保存了刪除或更新前的記錄行;
????????可以從deleted表中檢查被刪除的數(shù)據(jù)是否滿足業(yè)務(wù)需求;
????????如果不滿足,則向用戶報告錯誤消息,并回滾插入操作。


5.觸發(fā)器執(zhí)行時機
SQL Server觸發(fā)器有三種執(zhí)行時機:After、For、Instead of
【Ater】與【For】先執(zhí)行增刪改操作,再執(zhí)行觸發(fā)器操作
【Instead of】直接只執(zhí)行觸發(fā)器里的
Instead of觸發(fā)器用來代替通常的觸發(fā)動作,即當對表進行INSERT、UPDATE 或 DELETE 操作時,系統(tǒng)不是直接對表執(zhí)行這些操作,而是把操作內(nèi)容交給觸發(fā)器,讓觸發(fā)器檢查所進行的操作是否正確。如正確才進行相應的操作。因此,INSTEAD OF 觸發(fā)器的動作要早于表的約束處理。