我无法让此更新触发器正常工作。我想知道我想要做的事情是否可能。
所以我有一个名为tblCustomers
的客户表,其中包含字段:
ActivationStatus
RateClass
ParentCustomerID
(表示此客户是“孩子”的客户(如果有的话)每当父客户的ActivationStatus
或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
,因为我不确定这将对整个数据库中的许多其他触发器产生什么影响。
谢谢!
答案 0 :(得分:0)
我添加了
AND ((SELECT TRIGGER_NESTLEVEL()) = 1)
到If条件以阻止它再次发生子更新。仍在测试,但到目前为止似乎正在运作