簡體   English   中英

你如何優化表的多個觸發器?

[英]How do you priortize multiple triggers of a table?

我在桌子上有幾個觸發器,我想保持分離,並希望對它們進行優化。

我可以只有一個觸發器並在那里執行邏輯,但我想知道是否有一種更簡單/邏輯的方法來實現以預定義的順序使用它?

使用sp_settriggerorder。 您可以根據操作指定要觸發的第一個和最后一個觸發器。

MSDN上的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM