テーブルにいくつかのトリガーがあり、それらを別々に保持して優先順位を付けたいと考えています。
トリガーを 1 つだけ使用してそこでロジックを実行することもできますが、これを事前に定義された順序で実行する、より簡単で論理的な方法があるかどうか疑問に思っていました。
テーブルにいくつかのトリガーがあり、それらを別々に保持して優先順位を付けたいと考えています。
トリガーを 1 つだけ使用してそこでロジックを実行することもできますが、これを事前に定義された順序で実行する、より簡単で論理的な方法があるかどうか疑問に思っていました。
sp_settriggerorder を使用します。操作に応じて、起動する最初と最後のトリガーを指定できます。
上記のリンクから:
A. DML トリガー
の起動順序の設定 次の例では、uSalesOrderHeader トリガーが、Sales.SalesOrderHeader テーブルで UPDATE 操作が発生した後に起動される最初のトリガーになるように指定しています。
AdventureWorks を使用します。 行く sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='最初', @stmttype = 'UPDATE';
B. DDL トリガー
の起動順序の設定 次の例では、トリガー ddlDatabaseTriggerLog が、AdventureWorks データベースで ALTER_TABLE イベントが発生した後に起動される最初のトリガーになるように指定しています。
AdventureWorks を使用します。 行く sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='最初', @stmttype = 'ALTER_TABLE', @namespace = 'データベース';
トリガーの順序を変更すると、後で誰かが来て、再度並べ替える可能性があります。そして、メンテナンス開発者が注文を台無しにしないことを知っているように、トリガーの注文がどうあるべきかをどこに文書化しますか?2つのトリガータスクを特定の順序で確実に実行する必要がある場合、安全なルートはそれらを同じトリガーに配置することだけです。
ここを参照してください。
sp_settriggerorderを使用して、テーブルの各トリガーの順序を定義できます。
ただし、複数のことを行う単一のトリガーを使用する方がはるかに優れていると思います。複数のトリガーがある場合、その重要性はあまり明白ではないため、順序が重要な場合は特にそうです。誰かが何ヶ月も何年もかけてデータベースをサポートしようとしていると想像してみてください。もちろん、複数のトリガーが必要な場合や、実際にはより優れた設計の場合もありますが、トリガーを 1 つ用意してそこから作業する必要があると想定し始めます。