データベース トリガーを実行する順序を指定する
2014/1/5
文書番号:20311
通常、一つのテーブルに複数のトリガー(trriger)を設定した場合、その複数のトリガーが実行される順序はコンパイルされた順番(?)になっているようです。(これは違ったらご指摘ください)
そのトリガーも何度かALTER TRRIGER コマンドでコンパイルしているといつの間にか順序が変わって動作をしていたりします。(していました。)
つまりは複数のトリガーを実行するようにしてもその順序は任意であるということになります。
そもそも順序に意味があるトリガーを別々に作って実行させること自体・・・なのですが、それをどうしても順序を保証して実行したい場合、「最初」と「最後」を指定することができるようです。
【設定方法】
「sp_settriggerorder」コマンドを使用して”最初に実行するトリガー”と”最後に実行するトリガー”を指定することができます。
@triggername
トリガー名を指定します。
@order
最初に実行する指定は'First'、最後に実行する指定は'Last'と指定します。
起動順序を指定しない場合は指定しません。
@stmttype
トリガーを起動するSQLを指定します。
INSERT、UPDATE、DELETEなど。詳しくは「DDL イベント」を参照。
sp_settriggerorder @triggername= 'トリガー名', @order='First', @stmttype = 'INSERT'
トリガー名を指定します。
@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
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