您能否在视图上编写触发器,该视图在更改其基表后利用插入和删除表中的数据?

Posted

技术标签:

【中文标题】您能否在视图上编写触发器,该视图在更改其基表后利用插入和删除表中的数据?【英文标题】:Can you write a trigger on a view that utilizes data from the insert and delete tables after a change to its base tables? 【发布时间】:2012-04-03 14:51:04 【问题描述】:

我不确定我的问题的措辞是否能充分说明问题,因此我会尽可能详细说明。

我们正在尝试将一个 MS SQL 数据库中的更改同步到另一个 MS SQL 数据库,此时规定的解决方案涉及一系列触发器,这些触发器将获取插入或更新的信息,并将通过 dbmail 发送这行数据到接收服务器上的收件箱。一个小型邮件解析器检查信件并提取相关数据并填充接收数据库。

我现在正在解决的问题是如何不仅发送插入的数据,而且在更新语句的情况下,更新和未更改的数据,以便始终将完整的行发送到邮件解析器。更重要的是,我们正在使用的领域只有这么多,因为其他领域被视为机密。我们将访问的信息将来自至少两个但不超过五个不同的基表。

写在视图上的触发器是否可以访问在基表发生更改时创建的插入和删除逻辑表,或者视图对此类活动视而不见。如果是这样,如果数据来自三个或四个表,我如何将完整的行组合在一起?

当测试从单个表触发时,获取行和发送/解析数据没有问题,但是视图上的触发器的功能不同(显然)并且脚本不会产生任何结果,因为没有发生更改反对意见。我的想法是在基表中编写触发器以响应更新/插入,然后使用这些触发器利用 ins 和 del 逻辑表中的数据启动视图触发器。

这行得通吗?这是疯狂的还是合理的?

【问题讨论】:

【参考方案1】:

如果我错了,请原谅我。 在视图中使用“代替触发器”。在此触发器中编写基表的逻辑。

【讨论】:

“代替”触发器是我尝试过的一个选项,如果情况不同,它可以满足我的需求。我实际上已经设法完全避免了这种复杂性,只需将插入的表连接到触发器内的其他有问题的表,并每次将完整的行传递给 dbmail sproc,同时仔细管理应用程序层中的重复检查。与大多数事情一样,有一种更简单的方法(尽管我承认我的解释并没有让它听起来更简单)。再次感谢您的回答,以及您对我的询问的关注。

以上是关于您能否在视图上编写触发器,该视图在更改其基表后利用插入和删除表中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

仅在 1 个基表中更新数据库联接视图

sql-而不是触发器不会从视图中触发基表

简述oracle视图

视图基表中的 SQL 更新行

SQL 视图

SQL 视图