[英]How do you identify the triggers associated with a table in a sybase database?
[英]How do you priortize multiple triggers of a table?
我在桌子上有幾個觸發器,我想保持分離,並希望對它們進行優化。
我可以只有一個觸發器並在那里執行邏輯,但我想知道是否有一種更簡單/邏輯的方法來實現以預定義的順序使用它?
使用sp_settriggerorder。 您可以根據操作指定要觸發的第一個和最后一個觸發器。
從以上鏈接:
A.設置DML觸發器的觸發順序
以下示例指定觸發器uSalesOrderHeader是在Sales.SalesOrderHeader表上發生UPDATE操作后觸發的第一個觸發器。
USE AdventureWorks; GO sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';
B.設置DDL觸發器的觸發順序
以下示例指定觸發器ddlDatabaseTriggerLog是在AdventureWorks數據庫中發生ALTER_TABLE事件后觸發的第一個觸發器。
USE AdventureWorks; GO sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';
看到這里 。
您可以使用sp_settriggerorder來定義表上每個觸發器的順序。
但是,我認為你只需要一個可以執行多項操作的觸發器就會好得多。 如果訂單很重要,則尤其如此,因為如果您有多個觸發器,那么重要性將不會非常明顯。 想象一下有人試圖在數月/數年內支持數據庫。 當然,有可能存在需要多個觸發器的情況,或者它確實是更好的設計,但我開始假設您應該有一個並從那里開始工作。
記住,如果您更改觸發順序,其他人可以稍后再來,然后再重新排列。 你會在哪里記錄觸發器命令應該是什么,以便維護開發人員知道不要弄亂訂單或事情會破壞? 如果必須以特定順序執行兩個觸發器任務,唯一安全的路徑是將它們放在同一個觸發器中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.