熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows系統管理 >> 正文

ALTER TRIGGER

2022-06-13   來源: Windows系統管理 

  更改原來由 CREATE TRIGGER 語句創建的觸發器定義有關 ALTER TRIGGER 語句所用參數的更多信息請參見 CREATE TRIGGER
  
  語法
  ALTER TRIGGER trigger_name
  ON ( table | view )
  [ WITH ENCRYPTION ]
  {
   { ( FOR | AFTER | INSTEAD OF ) { [ DELETE ] [ ] [ INSERT ] [ ] [ UPDATE ] }
   [ NOT FOR REPLICATION ]
   AS
   sql_statement [ n ]
   }
   |
   { ( FOR | AFTER | INSTEAD OF ) { [ INSERT ] [ ] [ UPDATE ] }
   [ 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 表中包含 ALTER TRIGGER 語句文本的條目使用 WITH ENCRYPTION 可防止將觸發器作為 SQL Server 復制的一部分發布
  
  
  
  說明 如果原來的觸發器定義是用 WITH ENCRYPTION 或 RECOMPILE 創建的那麼只有在 ALTER TRIGGER 中也包含這些選項時這些選項才有效
  
  
  AFTER
  
  指定觸發器只有在觸發它的 SQL 語句執行成功後才觸發所有的引用級聯操作和約束檢查也必須成功完成後才能執行此觸發器
  
  如果僅指定了 FOR 關鍵字那麼 AFTER 是默認設置
  
  AFTER 觸發器只能定義在表上
  
  INSTEAD OF
  
  指定執行觸發器而不是觸發 SQL 語句從而替代觸發語句的操作
  
  在表或視圖上每個 INSERTUPDATE 或 DELETE 語句最多可以定義一個 INSTEAD OF 觸發器然而可以在每個具有 INSTEAD OF 觸發器的視圖上定義視圖
  
  INSTEAD OF 觸發器不允許定義在用 WITH CHECK OPTION 創建的視圖上如果向指定了 WITH CHECK OPTION 選項的視圖添加 INSTEAD OF 觸發器SQL Server 將引發一個錯誤用戶必須用 ALTER VIEW 刪除該選項後才能定義 INSTEAD OF 觸發器
  
  { [DELETE] [] [INSERT] [] [UPDATE] } | { [INSERT] [] [UPDATE]}
  
  是指定在表或視圖上執行哪些數據修改語句時將激活觸發器的關鍵字必須至少指定一個選項在觸發器定義中允許使用以任意順序組合的這些關鍵字如果指定的選項多於一個需用逗號分隔這些選項
  
  對於 INSTEAD OF 觸發器不允許在具有 ON DELETE 級聯操作引用關系的表上使用 DELETE 選項同樣也不允許在具有 ON UPDATE 級聯操作引用關系的表上使用 UPDATE 選項有關更多信息請參見 ALTER TABLE
  
  NOT FOR REPLICATION
  
  表示當復制登錄(如 sqlrepl)更改觸發器所涉及的表時不應執行該觸發器
  
  AS
  
  是觸發器要執行的操作
  
  sql_statement
  
  是觸發器的條件和操作
  
  n
  
  是表示觸發器中可以包含多條 TransactSQL 語句的占位符
  
  IF UPDATE (column)
  
  測試在指定的列上進行的 INSERT 或 UPDATE 操作不能用於 DELETE 操作
  
  可以在觸發器主體中的任意位置使用 UPDATE(column)
  
  {AND | OR}
  
  指定要測試 INSERT 或 UPDATE 操作的另一個列
  
  column
  
  是要測試 INSERT 或 UPDATE 操作的列名
  
  IF (COLUMNS_UPDATED())
  
  判斷提及的一列或多列是插入還是更新僅用於 INTSERT 或 UPDATE 觸發器中COLUMNS_UPDATED 返回 varbinary 位模式該位模式表示表的哪些列進行了插入操作哪些列進行了更新操作
  
  可以在觸發器主體中的任意位置使用 COLUMNS_UPDATED
  
  bitwise_operator
  
  是用於比較運算的位運算符
  
  updated_bitmask
  
  是整型位掩碼表示實際更新或插入的列例如表 t 包含列 CCCC 和 C假定表 t 上有 UPDATE 觸發器若要檢查列 CC 和 C 是否都有更新指定值 若要檢查是否只有列 C 有更新指定值
  
  comparison_operator
  
  是比較運算符使用等號 (=) 檢查 updated_bitmask 中指定的所有列是否都實際進行了更新使用大於號 (>) 來檢查 updated_bitmask 中指定的列是否有進行過更新的或者沒有全部進行更新
  
  column_bitmask
  
  是要檢查的列的整型位掩碼
  
  說明 由於 Microsoft 不支持在系統表上添加用戶定義觸發器所以建議不要在系統表上創建用戶定義觸發器
  
  
  通過表和視圖上的 INSTEAD OF 觸發器ALTER TRIGGER 支持可手工更新的視圖Microsoft® SQL Server&#; 以相同的方式對所有類型的觸發器(AFTERINSTEADOF)應用 ALTER TRIGGER
  
  可用 sp_settriggerorder 指定表上第一個和最後一個執行的 AFTER 觸發器在表上只能指定一個第一個執行及一個最後一個執行的 AFTER 觸發器如果該表上還有其它 AFTER 觸發器那麼這些觸發器將以未定義的順序執行
  
  如果 ALTER TRIGGER 語句更改了第一個或最後一個觸發器則將除去已修改觸發器上設置的第一個或最後一個特性而且必須用 sp_settriggerorder 重置排序值
  
  只有當激發觸發器的 SQL 語句(包括所有與被更新或刪除對象有關的引用級聯操作和約束檢查)成功執行後AFTER 觸發器才會執行AFTER 觸發器操作要檢查激發觸發器的語句的運行結果(也包括所有由激發語句引起的 UPDATE 和 DELETE 引用級聯操作)
  
  如果一個子表或引用表上的 DELETE 操作是由於父表的 CASCADE DELETE 操作所引起的並且子表上定義了 DELETE 的 INSTEAD OF 觸發器那麼將忽略該觸發器並執行 DELETE 操作
  
  權限
  ALTER TRIGGER 的權限默認地授予 db_owner 和 db_ddladmin 固定數據庫角色的成員以及表所有者這些權限是不可傳遞的
  
  示例
  下例首先創建一個觸發器當用戶在表 roysched 中添加或更改數據時該觸發器向客戶端打印一條用戶定義消息然後使用 ALTER TRIGGER 語句使該觸發器僅對 INSERT 活動有效該觸發器有助於提醒向表中插入行或更新行的用戶及時通知書的作者和出版商
  
  USE pubs
  GO
  CREATE TRIGGER royalty_reminder
  ON roysched
  WITH ENCRYPTION
  FOR INSERT UPDATE
  AS RAISERROR ( )
  
   Now alter the trigger
  USE pubs
  GO
  ALTER TRIGGER royalty_reminder
  ON roysched
  FOR INSERT
  AS RAISERROR ( )
  
  消息 是 sysmessages 中的用戶定義消息
From:http://tw.wingwit.com/Article/os/xtgl/201311/9058.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.