0

我无法让此更新触发器正常工作。我想知道我正在尝试做的事情是否可能。

所以我有一个名为的客户表,tblCustomers其中包含以下字段:

  • ActivationStatus
  • RateClass
  • ParentCustomerID (表示该客户是哪个客户(如果有)的“孩子”)

ActivationStatus每当父客户或父客户发生 UPDATE 时RateClass,任何子客户也需要使用相同的值进行更新。

我目前有:

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 回答