更新触发器需要在相同的表和字段上进行更新

时间:2013-11-20 15:56:01

标签: sql sql-server triggers database-trigger

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

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

  • ActivationStatus
  • RateClass
  • ParentCustomerID(表示此客户是“孩子”的客户(如果有的话)

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

我目前有:

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,因为我不确定这将对整个数据库中的许多其他触发器产生什么影响。

谢谢!

1 个答案:

答案 0 :(得分:0)

我添加了

AND ((SELECT TRIGGER_NESTLEVEL()) = 1)

到If条件以阻止它再次发生子更新。仍在测试,但到目前为止似乎正在运作