首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止不同表上的两个触发器同时触发?

如何防止不同表上的两个触发器同时触发?
EN

Stack Overflow用户
提问于 2016-07-23 03:33:29
回答 2查看 189关注 0票数 2

我有一个名为ClientInfo的表,用于存储客户的个人信息,另一个名为EmergencyContactInfo的表,用于存储客户的紧急联系信息。现在,我在我的ClientInfo表上有一个update触发器,如果他们的任何个人信息发生变化,它会将一条记录插入第三个名为ClientLog的表中。如果客户的紧急联系信息发生变化,我还想创建一个ClientLog记录。

问题是,用户只需从我的网页上保存一次,就可以更改客户的个人信息和紧急联系信息。如果我在EmergencyContact表上放置了一个update触发器,那么我的两个触发器都将被触发,并且ClientLog表将在我只需要一条记录时插入两条新记录。

据我所知,没有跨越多个表的update触发器。当客户的个人信息和他们的紧急联系信息都发生变化时,我可以采取什么替代方法来插入单个记录?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-23 03:55:43

您的理解是正确的,一个触发器不能跨越多个表。

也没有阻止触发器触发的东西。

您可以做的是在触发器中包含逻辑,如果某些条件为真,则阻止触发器执行任何操作。

现在,我不知道您正在向日志表中写入什么,也不知道您想要强制执行什么逻辑,但举个例子,当触发器触发时,如果在过去x个小时内同一客户端已经有一个日志条目(日志表中的行),那么就不在日志表中插入新的行。

您甚至可以使用日志表的OUTER JOINWHERE NOT EXISTS()子句来处理多行插入/更新。

但基本上我要说的是,让两个触发器都触发,并且在两个触发器中,在写入日志表之前检查某个条件是否为真/假。否则,什么也不做。

票数 1
EN

Stack Overflow用户

发布于 2016-07-23 05:12:06

你让这件事变得不必要的困难和容易出错。

如果每个数据表都有一个单独的日志表和它自己的触发器,那么您可以忽略整个问题,让它们按照应该的方式工作。

如果您想一起查看日志信息,则可以在显示数据时对这两个表使用连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38534065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档