我目前正在尝试创建一个触发器,它会更新另一个表中列中的值,但我尝试的每次尝试都不起作用。我的设置是这样的,每次客户地址在customer
表中更新时,表customer audit
都会更新customer
表,从我要更新addresschangedcount
的审计表中customer
表中的列,每次在审计表中更改地址时按客户ID进行分组,到目前为止,我的代码是这样的,但它没有更新customer
表:
create trigger Attempt3Advanced
on CustomerAudit
after update
as
if (update (AddressChangedCount))
begin
UPDATE tblCustomer
SET tblCustomer.AddressChangedCount = inserted.AddressChangedCount
FROM tblCustomer
JOIN inserted
ON tblCustomer.AddressChangedCount = inserted.AddressChangedCount
end
有谁能告诉我哪里出错了,如果可能的话会提供一些解决方案?
答案 0 :(得分:0)
首先:您不应该从审计表中更新真实的表。
并且您不应该冗余地存储数据。您只需查找审计表即可确定对该地址所做的更改次数。然后您的代码会在审计表中显示一个字段AddressChangedCount
。这是为什么?地址数是否已更改为审计表中的地址更改记录数?
最后您要更新客户的地址更改计数,但您不会查找客户的记录,而是查找具有相同计数的记录:
ON tblCustomer.AddressChangedCount = inserted.AddressChangedCount
我的建议:完全删除计数字段。如果你想要一个计数,那就算了。像这样:
select c.customer_id, coalesce(ca.cnt, 0)
from tblcustomer c
left join
(
select customer_id, count(*) as cnt
from customeraudit
where coalesce(old_address, '') <> coalesce(new_address, '')
) ca on ca.customer_id = c.customer_id;