SQL Server 觸發器(3)

來源:互聯網
上載者:User
     觸發器是一種特殊的預存程序,與表格緊密相連。當使用者修改表中的資料時,觸發器將自動執行,觸發器可以使用Transact-SQL語句進行複雜的邏輯處理,它基於一個表建立,但是可以對多個表進行操作,因此常常用於複雜的商務規則。建立觸發器的文法如下:

CREATE TRIGGER trigger_name 
ON { 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_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ] 
sql_statement [ ...n ] 

}

建立觸發器文法中各參數的說明如表所示。

表    建立觸發器文法中的參數列表

參數 說明
 
trigger_name
 觸發器的名稱。觸發器名稱必須符合標識符規則,並且在資料庫中必須惟一。可以選擇是否指定觸發器所有者名稱
 
Table | view
 在其上執行觸發器的表或視圖,有時稱為觸發器表或觸發器視圖。可以選擇是否指定表或視圖的所有者名稱
 
WITH ENCRYPTION
 加密syscomments表中包含CREATE TRIGGER語句文本的條目。使用WITH ENCRYPTION可防止將觸發器作為SQL Server複製的一部分發布
 
AFTER
 指定觸發器只有在觸發SQL語句中指定的所有操作都已成功執行後才激發。所有的引用級聯操作和約束檢查也必須成功完成後,才能執行此觸發器
 
INSTEAD OF
 指定執行觸發器而不是執行觸發SQL語句,從而替代觸發語句的操作。

在表或視圖上,每個INSERT、UPDATE或DELETE語句最多可以定義一個INSTEAD OF觸發器。然而,可以在每個具有INSTEAD OF觸發器的視圖上定義視圖。

INSTEAD OF觸發器不能在WITH CHECK OPTION的可更新視圖上定義。如果向指定了WITH CHECK OPTION選項的可更新視圖添加INSTEAD OF觸發器,SQL Server將產生一個錯誤。使用者必須用ALTER VIEW刪除該選項後才能定義INSTEAD OF觸發器
 
{ [DELETE] [,] [INSERT] [,] [UPDATE] }
 指定在表或視圖上執行哪些資料修改語句時將啟用觸發器的關鍵字。必須至少指定一個選項。在觸發器定義中允許使用以任意順序組合的這些關鍵字。如果指定的選項多於一個,需用逗號分隔這些選項

對於INSTEAD OF觸發器,不允許在具有ON DELETE級聯操作參考關聯性的表上使用DELETE選項。同樣,也不允許在具有ON UPDATE級聯操作參考關聯性的表上使用UPDATE選項
 
WITH APPEND
 指定應該添加現有類型的其他觸發器。只有當相容層級是65或更低時,才需要使用該可選子句。如果相容層級是70或更高,則不必使用WITH APPEND子句添加現有類型的其他觸發器
 
NOT FOR REPLICATION
 表示當複製進程更改觸發器所涉及的表時,不應執行該觸發器
 
AS
 觸發器要執行的操作
 
sql_statement
 觸發器的條件和操作。觸發器條件指定其他準則,以確定DELETE、INSERT 或UPDATE語句是否導致執行觸發器操作。

當嘗試DELETE、INSERT或UPDATE操作時,Transact-SQL語句中指定的觸發器操作將生效
 

指定觸發器何時觸發分為以下兩種情況:

AFTER觸發器在觸發操作(INSERT、UPDATE或DELETE)後和處理完任何約束後觸發。可通過指定AFTER或FOR關鍵字來請求 AFTER 觸發器。因為FOR關鍵字與AFTER的效果相同,所以具有FOR關鍵字的觸發器也歸類為AFTER觸發器。
INSTEAD OF觸發器代替觸發動作進行觸發,並在處理約束之前觸發。對於每個觸發操作(UPDATE、DELETE和INSERT),每個表或視圖只能有一個INSTEAD OF觸發器。而一個表對於每個觸發操作可以有多個AFTER觸發器。
   樣本   觸發器的建立與應用

本樣本實現的是,當對班級表進行刪除操作時,其學生表中屬於被刪除班的學生資訊自動刪除。

程式碼如下:

IF EXISTS (SELECT name 
      FROM   sysobjects 
      WHERE  name = 'Trig_Del' 
      AND       type = 'TR')
    DROP TRIGGER Trig_Del
GO
CREATE TRIGGER Trig_Del
ON t_TClass
FOR DELETE
AS
BEGIN
   declare @ID varchar(10)
   select @ID=t_trigClss from deleted
   delete from t_TStu where t_trigClass=@ID
END

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.