0

トリガーによって実行されたアクションが別のトリガーを起動する(または起動しない)ことを許可する「トリガーが他のトリガーを起動できるようにする」サーバー設定について知っています。理解しているように、私の唯一のオプションはTrueです(トリガーが他のトリガーを起動できるようにします。終わりのない再帰につながる)またはFalse(トリガーによって実行されたアクションは他のトリガーを起動せず、予期しない結果または一貫性のないデータにつながる可能性があります)。

SQL Serverで「最大トリガー深度」を適用する方法はありますか?私は2008年を使用していますが、それが重要な場合は、どのバージョン(または、他のRDBMSでも、私の知識は確かに限られていますが)の機能を認識していません。たとえば、これが私が欲しいものです:

  1. 「最大トリガー深度」を「2」に設定します。
  2. table1に行を挿入します
  3. table1のトリガーがtable2に挿入されます
  4. table2のトリガーがtable3に挿入されます
  5. table4に挿入するトリガーがtable3にありますが、最大深度が2であるため、トリガーは実行されません(理想的ではありませんが、SQLServerでの現在の「再帰的トリガー=False」の動作と一致します)。挿入のセット全体がロールバックされ、「最大トリガー深度(2)を超えました-挿入に失敗しました」というメッセージ(理想)などのエラーで失敗します。

これが可能かどうか、またはこの動作に対する未解決の機能要求があるかどうかを知っている人はいますか?私が頭がおかしくて、これが行動のひどい考えであるなら、私はそれを受け入れますが、その理由(意図しない結果など)を知りたいです。

4

1 に答える 1

4

トリガー内で、ネストレベルを確認し、オプションで以下を返すことができます。

IF (TRIGGER_NESTLEVEL() > 2)
    RETURN

詳細については、このブログ投稿を参照してください。

于 2009-10-26T16:30:19.773 に答える