利用sp_settriggerorder設定觸發器執行順序

來源:互聯網
上載者:User

利用sp_settriggerorder設定觸發器執行順序
轉自:http://www.lmwlove.com/ac/ID564
今天看到有朋友在群中問能否為觸發器設定執行順序,有朋友說觸發器在資料庫中自動執行,所以不能夠設定執行順序。其實這種說法是不對的,我們可以利用sp_settriggerorder為部分觸發器設定執行順序。

先看看sp_settriggerorder的功能說明:
sp_settriggerorder:指定第一個激發或最後一個激發的AFTER觸發器。在第一個和最後一個觸發器之間觸發的AFTER觸發器將按未定義的順序執行。

文法說明:sp_settriggerorder [ @triggername = ] '[ triggerschema. ] triggername',
[ @order = ] 'value',
[ @stmttype = ] 'statement_type'[ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]

參數說明:
@triggername = ] '[ triggerschema. ] triggername'
要設定或更改其順序的觸發器的名稱及其所屬的架構。

[@order=] 'value'
觸發器的新順序的設定,可以是下列值中的任意一個值。First--觸發器被第一個觸發。 
Last--觸發器被最後一個觸發。 
None--觸發器以未定義的順序觸發。

[@stmttype=] 'statement_type'
指定觸發器的類型,可以是INSERT、UPDATE、DELETE、LOGON 或用於激發DDL觸發器的DDL事件中列出的任何 Transact-SQL 語句事件。

@namespace = { 'DATABASE' | 'SERVER' | NULL }
如果 triggername 是 DDL 或登入觸發器,則指定所建立的 triggername 是具有資料庫範圍還是伺服器範圍。

傳回值:
0(成功)或 1(失敗)

注意:
1,當觸發器被修改,那麼對它的sp_settriggerorder設定也會失效,也就是說每次修改觸發器後,你都需要重新利用sp_settriggerorder對執行順序進行設定。
2,同一類型的觸發器(insert,update,delete)只能設定一個First與一個Last觸發器,也就是說,只能設定一個最先執行的與最後執行的觸發器,中間的就設定不了。

範例程式碼:
設定insert觸發器ti_Storage_MoveDetail為第一個執行的觸發器sp_settriggerorder 'ti_Storage_MoveDetail','first','insert'

設定update觸發器tu_Storage_MoveDetail為最後一個執行的觸發器sp_settriggerorder 'tu_Storage_MoveDetail','last','update'

所以, 如果觸發器不是instead of觸發器,而且每類(insert,update,delete)的觸發器數量不超過3個,那我們就完全可以控制執行順序。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.