SQL SERVER觸發器

sqlserver觸發器詳解

觸發器是一系列的T-SQL編寫完成,是一種特殊的存儲過程,
–觸發器只能由數據庫的特定事件來觸發,所謂的的特定事件主要包括以下幾種類型
(1)用戶在指定的表或視圖中進行DML操作
INSERT 操作,在特定的表或視圖中添加數據
UPDATE 操作,對特定的表或視圖修改數據
DELETE 操作,刪除特定的表或視圖數據
(2)用戶進行DDL操作
CREATE 創建對象
ALTER 修改對象
DROP 刪除對象
(3)用戶進行LOGON(登錄)操作
與SQL SERVER 實例建立連接
觸發器分類
DML觸發器:又被稱爲數據操作語言觸發器作用在表或視圖上,在對錶或視圖操作時會激發該類型觸發器
該類型觸發器包括
AFTER觸發器:在 INSERT,UPDATE,DELETE,執行操作後觸發,
INSTEAD OF 觸發器:此類型觸發器會用觸發器本身操作替換原來的觸發器(INSERT…)通常作用在視圖上,利用該觸發器視圖可以變成可更新視圖。
DDL觸發器:被稱爲定義語言觸發器,當 CREATE,ALTER,DROP 隊象進行其他DDL操作時會激發該觸發器,利用它可以影響數據庫業務規則。
CLR觸發器:在 .NET FRAMEWORK中創建,不像其他觸發器需要執行T-SQL過程
登錄觸發器:當於SQL SERVER實例建立連接時觸發
觸發器工作原理
觸發器的原理涉及到兩張虛擬表,分別是INSERTED表和DELETED表
INSERT 操作觸發器當操作數據時,會在數據表和 INSERTED 表同時放入數據,利用INSERTED表可以得到已經插入的數據
DELETE 操作觸發器。當從數據庫刪除數據時。數據首先被放入DELETED表中,該表是一張存放了已經刪除的數據虛擬表。在觸發器中可以調用該表的數據。
UPDATE 操作觸發器。和其他兩種不同,當對觸發器所在的表執行UPDATE語句時,元數據會被轉移到DELETED表中,而修改後的數據則被插入到INSERTED表中最後
觸發這兩個表的數據,進行更新。

(1)數據操縱語言DML觸發器的語法結構

  CREATE TRIGGER [dbo.]triggeres
  on{table|view}
  {WITH<trigger_option>[,...n]}
  {FOR|AFTER|INSERT OF}
  {[INSERT][,][UPDATE][,][DELETE]}
  [WITH APPEND]
  [NOT FOR REPLICATION]
  AS {SQL_STATEMENT[;][....n]|EXTERNAL NAME assembly_name.class_name.method_name[;]}
  <trigger_option> ::=
  [ENCRYPTION]
  [EXECUTE AS Clause]

–語法說明
第1行:CREATE TRIGGER表示創建觸發器的關鍵字 dbo項表示觸發器所屬的架構名稱 triggeres表示觸發器名稱
第2行 on{table|view},觸發器所作用的表或視圖,DML類型觸發器不能作用在局部或全局臨時表上
第3行 FOR|AFTER 項:AFTER 表示觸發器被激發的時機。它在SQL所有的操作中完成,並且約束檢查完成後被激發,默認是 AFTER
INSERT OF項:表示替代類型觸發器對每個 INSERT, UPDATE 或 DELETE 語句只能定義一個 insert of 觸發器
第4行 [INSERT][,][UPDATE][,][DELETE]項:激發觸發器的操作,這裏可以選取任意組合。
第5行 WITH APPEND 項:指定添加一個已有類型的觸發器,但如果顯示聲明瞭 AFTER 觸發器,或觸發器類型是 insert of 時則不能使用該項
第6行 NOT FOR REPLICATION 項:當複製代碼修改涉及觸發器表時,不執行觸發器。
第7行 SQL_STATEMENT 項:可以確定觸發器的具體操作的判斷條件和操作 EXTERNAL NAME assembly_name.class_name.method_name[;]項:針對CLR觸發器,指定
程序集與觸發器綁定方法。
[ENCRYPTION] 項: 表示對創建觸發器的語句進行模糊處理。
EXECUTE AS 項:指定用於執行該觸發器的安全上下文。
–數據庫定義語言DDL觸發器語法結構

CREATE TRIGGER TRIGGER
  ON {ALL SERVER|DATABASE }
  {WITH<DDL_trigger_option>[,...n]}
   {FOR|AFTER}{event_TYPE|event_group}[,...n]
as {SQL_STATEMENT[;][....n]|EXTERNAL NAME assembly_name.class_name.method_name[;]}
  <trigger_option> ::=
  [ENCRYPTION]
  [EXECUTE AS Clause]

第1行:CREATE TRIGGER:表示創建觸發器的關鍵字 TRIGGER 表示觸發器名稱
第2行 ON {ALL SERVER| },表示觸發器的範圍是整個服務器 ON {ALL DATABASE| }表示觸發器的範圍是當前數據庫
第3行 FOR|AFTER 項:AFTER 表示觸發器被激發的時機。默認是 AFTER
第5行 event_TYPE項:激發觸發器DDL事件名稱 event_group:預定義T-SQL語言事件分組名稱
第6行 SQL_STATEMENT項:可以確定觸發器具體操作的判斷條件和操作,EXTERNAL NAME assembly_name.class_name.method_name[;]項:針對CLR觸發器,指定
程序集與觸發器綁定方法。
第7,8,9行
[ENCRYPTION] 項: 表示對創建觸發器的語句進行模糊處理。
–登錄觸發器語法結構

 CREATE TRIGGER trigger
  on ALL SERVER
  {WITH<LOGON_trigger_option>[,...n]}
  {FOR|AFTER}LOGON
  as {SQL_STATEMENT[;][....n]|EXTERNAL NAME assembly_name.class_name.method_name[;]}
  <trigger_option> ::=
  [ENCRYPTION]
  [EXECUTE AS Clause]

FOR|AFTER 項 :默認是after這裏表示登錄後被觸發

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章