更改原來由 CREATE TRIGGER 語句創建的觸發器定義
語法
ALTER TRIGGER trigger_name
ON ( table | view )
[ WITH ENCRYPTION ]
{
{ ( FOR | AFTER | INSTEAD OF ) { [ DELETE ] [
[ NOT FOR REPLICATION ]
AS
sql_statement [
}
|
{ ( FOR | AFTER | INSTEAD OF ) { [ INSERT ] [
[ NOT FOR REPLICATION ]
AS
{ IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [
}
sql_statement [
}
}
參數
trigger_name
是要更改的現有觸發器
table | view
是觸發器在其上執行的表或視圖
WITH ENCRYPTION
加密 syscomments 表中包含 ALTER TRIGGER 語句文本的條目
說明 如果原來的觸發器定義是用 WITH ENCRYPTION 或 RECOMPILE 創建的
AFTER
指定觸發器只有在觸發它的 SQL 語句執行成功後才觸發
如果僅指定了 FOR 關鍵字
AFTER 觸發器只能定義在表上
INSTEAD OF
指定執行觸發器而不是觸發 SQL 語句
在表或視圖上
INSTEAD OF 觸發器不允許定義在用 WITH CHECK OPTION 創建的視圖上
{ [DELETE] [
是指定在表或視圖上執行哪些數據修改語句時將激活觸發器的關鍵字
對於 INSTEAD OF 觸發器
NOT FOR REPLICATION
表示當復制登錄(如 sqlrepl)更改觸發器所涉及的表時
AS
是觸發器要執行的操作
sql_statement
是觸發器的條件和操作
n
是表示觸發器中可以包含多條 Transact
IF UPDATE (column)
測試在指定的列上進行的 INSERT 或 UPDATE 操作
可以在觸發器主體中的任意位置使用 UPDATE(column)
{AND | OR}
指定要測試 INSERT 或 UPDATE 操作的另一個列
column
是要測試 INSERT 或 UPDATE 操作的列名
IF (COLUMNS_UPDATED())
判斷提及的一列或多列是插入還是更新
可以在觸發器主體中的任意位置使用 COLUMNS_UPDATED
bitwise_operator
是用於比較運算的位運算符
updated_bitmask
是整型位掩碼
comparison_operator
是比較運算符
column_bitmask
是要檢查的列的整型位掩碼
說明 由於 Microsoft 不支持在系統表上添加用戶定義觸發器
通過表和視圖上的 INSTEAD OF 觸發器
可用 sp_settriggerorder 指定表上第一個和最後一個執行的 AFTER 觸發器
如果 ALTER TRIGGER 語句更改了第一個或最後一個觸發器
只有當激發觸發器的 SQL 語句(包括所有與被更新或刪除對象有關的引用級聯操作和約束檢查)成功執行後
如果一個子表或引用表上的 DELETE 操作是由於父表的 CASCADE DELETE 操作所引起的
權限
ALTER TRIGGER 的權限默認地授予 db_owner 和 db_ddladmin 固定數據庫角色的成員
示例
下例首先創建一個觸發器
USE pubs
GO
CREATE TRIGGER royalty_reminder
ON roysched
WITH ENCRYPTION
FOR INSERT
AS RAISERROR (
USE pubs
GO
ALTER TRIGGER royalty_reminder
ON roysched
FOR INSERT
AS RAISERROR (
消息
From:http://tw.wingwit.com/Article/os/xtgl/201311/9058.html