0

この更新トリガーを機能させるのに問題があります。私がやろうとしていることさえ可能かどうか疑問に思っています。

したがって、tblCustomersフィールドを持つ顧客のテーブルがあります。

  • ActivationStatus
  • RateClass
  • ParentCustomerID (この顧客が「子」である顧客 (存在する場合) を示します)

親 Customer でUPDATE が発生するたびに、ActivationStatusRateClassCustomer も同じ値で更新する必要があります。

私は現在持っています:

ALTER TRIGGER [tblCustomers_UTrig] ON [tblCustomers] FOR UPDATE AS

-- If ActivationStatus updated, need to update any child Customers too
IF UPDATE(ActivationStatus)
    BEGIN
        UPDATE tblCustomers
        SET tblCustomers.ActivationStatus = inserted.ActivationStatus
        FROM tblCustomers, inserted
        WHERE tblCustomers.ParentCustomerID = inserted.CustomerID               
    END

-- IF RateClass updated, need to update any child Customers too
IF UPDATE(RateClass)
    BEGIN
        UPDATE tblCustomers
        SET tblCustomers.RateClass = inserted.RateClass
        FROM tblCustomers, inserted
        WHERE tblCustomers.ParentCustomerID = inserted.CustomerID               
    END

更新しようとすると、次のエラーが表示されます: 最大ストアド プロシージャ、関数、トリガー、またはビューのネスト レベルを超えました (制限 32)

明らかに再帰の問題が発生しており、なぜそれが発生しているのかは理にかなっていますが、このようなことは可能なはずですよね? どうすればこれを達成できますか?

SET RECURSIVE_TRIGGERS OFFデータベース全体にある他の多くのトリガーにどのような影響があるのか​​ わからないため、実行したくないことに注意してください.

ありがとうございました!

4

1 に答える 1

0

私は追加しました

AND ((SELECT TRIGGER_NESTLEVEL()) = 1)

子の更新での再帰を停止する If 条件に。まだテスト中ですが、これまでのところ機能しているようです

于 2013-11-20T16:40:55.000 に答える