我有一个名为ClientInfo的表,用于存储客户的个人信息,另一个名为EmergencyContactInfo的表,用于存储客户的紧急联系信息。现在,我在我的ClientInfo表上有一个update触发器,如果他们的任何个人信息发生变化,它会将一条记录插入第三个名为ClientLog的表中。如果客户的紧急联系信息发生变化,我还想创建一个ClientLog记录。
问题是,用户只需从我的网页上保存一次,就可以更改客户的个人信息和紧急联系信息。如果我在EmergencyContact表上放置了一个update触发器,那么我的两个触发器都将被触发,并且ClientLog表将在我只需要一条记录时插入两条新记录。
据我所知,没有跨越多个表的update触发器。当客户的个人信息和他们的紧急联系信息都发生变化时,我可以采取什么替代方法来插入单个记录?
发布于 2016-07-23 03:55:43
您的理解是正确的,一个触发器不能跨越多个表。
也没有阻止触发器触发的东西。
您可以做的是在触发器中包含逻辑,如果某些条件为真,则阻止触发器执行任何操作。
现在,我不知道您正在向日志表中写入什么,也不知道您想要强制执行什么逻辑,但举个例子,当触发器触发时,如果在过去x个小时内同一客户端已经有一个日志条目(日志表中的行),那么就不在日志表中插入新的行。
您甚至可以使用日志表的OUTER JOIN或WHERE NOT EXISTS()子句来处理多行插入/更新。
但基本上我要说的是,让两个触发器都触发,并且在两个触发器中,在写入日志表之前检查某个条件是否为真/假。否则,什么也不做。
发布于 2016-07-23 05:12:06
你让这件事变得不必要的困难和容易出错。
如果每个数据表都有一个单独的日志表和它自己的触发器,那么您可以忽略整个问题,让它们按照应该的方式工作。
如果您想一起查看日志信息,则可以在显示数据时对这两个表使用连接。
https://stackoverflow.com/questions/38534065
复制相似问题