SQL server 數據庫指定第一個與最后一個觸發器的方案
以下的文章主要向大家講述的是SQL server 數據庫如何正確指定***個觸發器與***一個觸發器的實際操作方案,其具體的操作方案可以將和表相關聯的 AFTER 觸發器之一指定為每個 INSERT、DELETE 和 UPDATE 觸發動作執行的***個或***一個 AFTER 觸發器。
在***個和***一個觸發器之間激發的 AFTER 觸發器將按未定義的順序執行。
若要指定 AFTER 觸發器的順序,請使用 sp_settriggerorder 存儲過程。可用的選項有:
***個
SQL server 數據庫指定該觸發器是為觸發操作激發的***個 AFTER 觸發器。
***一個
指定該觸發器是為觸發操作激發的***一個 AFTER 觸發器。
無
指定觸發器的激發沒有特定的順序。主要用于重新設置***個或***一個觸發器。
以下是使用 sp_settriggerorder 的示例:
- sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'
重要 ***個和***一個觸發器必須是兩個不同的觸發器。
可能同時在表上定義了 INSERT、UPDATE 和 DELETE 觸發器。每種語句類型可能都有自己的***個和***一個觸發器,但它們不能是相同的觸發器。
如果為某個表定義的***個或***一個觸發器不包括觸發操作,如 FOR UPDATE、FOR DELETE 或 FOR INSERT,則缺少的操作將沒有***個或***一個觸發器。
不能將 INSTEAD OF 觸發器SQL server 數據庫指定為***個或***一個觸發器。在對基礎表進行更新前激發 INSTEAD OF 觸發器。然而,如果由 INSTEAD OF 觸發器對基礎表進行更新,則這些更新將發生于在表上定義觸發器(包括***個觸發器)之后。
例如,如果視圖上的 INSTEAD OF 觸發器更新基表并且該基表包含三個觸發器,則該三個觸發器在 INSTEAD OF 觸發器插入數據之前激發。有關更多信息,請參見SQL server 數據庫指定觸發器何時激發。
如果 ALTER TRIGGER 語句更改了***個或***一個觸發器,則將除去 First 或 Last 特性,并且順序值將設置為 None;必須用 sp_settriggerorder 重置此順序。
OBJECTPROPERTY 函數使用屬性 ExecIsFirstTrigger 和 ExecIsLastTrigger 報告觸發器的順序是***個還是***一個。
復制將為本身是即時更新訂戶或排隊更新訂戶的任何表自動生成***個觸發器。復制要求它的觸發器是***個觸發器。如果嘗試使具有***個觸發器的表成為即時更新訂戶或排隊更新訂戶,復制將引發錯誤。如果使表成為即時更新訂戶或排隊更新訂戶之后使用戶定義觸發器成為***個觸發器,則 sp_settriggerorder 會返回一個錯誤。
如果在復制觸發器上使用 ALTER,或使用 sp_settriggerorder 將復制觸發器更改為***觸發器或無觸發器,則訂閱將不能正確工作。
【編輯推薦】