HOME >> Tips >> Microsoft SQL Server

データベース トリガーを実行する順序を指定する

2014/1/5
文書番号:20311

通常、一つのテーブルに複数のトリガー(trriger)を設定した場合、その複数のトリガーが実行される順序はコンパイルされた順番(?)になっているようです。(これは違ったらご指摘ください)

そのトリガーも何度かALTER TRRIGER コマンドでコンパイルしているといつの間にか順序が変わって動作をしていたりします。(していました。)
つまりは複数のトリガーを実行するようにしてもその順序は任意であるということになります。

そもそも順序に意味があるトリガーを別々に作って実行させること自体・・・なのですが、それをどうしても順序を保証して実行したい場合、「最初」と「最後」を指定することができるようです。

【設定方法】

「sp_settriggerorder」コマンドを使用して”最初に実行するトリガー”と”最後に実行するトリガー”を指定することができます。

sp_settriggerorder  @triggername= 'トリガー名', @order='First', @stmttype = 'INSERT'
@triggername
 トリガー名を指定します。

@order
 最初に実行する指定は'First'、最後に実行する指定は'Last'と指定します。
 起動順序を指定しない場合は指定しません。

@stmttype
 トリガーを起動するSQLを指定します。
 INSERT、UPDATE、DELETEなど。詳しくは「DDL イベント」を参照。

【参考情報】

最初と最後のトリガーの指定
http://technet.microsoft.com/ja-jp/library/ms189568.aspx

sp_settriggerorder (Transact-SQL)
http://technet.microsoft.com/ja-jp/library/ms186762.aspx

DDL イベント
http://technet.microsoft.com/ja-jp/library/bb522542.aspx