【发布时间】:2020-11-30 23:42:07
【问题描述】:
我正在向现有数据库表添加一个触发器,该表由我未编写代码的应用程序使用,并且无法更改其中的代码。
我想在INSERT 上将TableA 中的一些信息插入TableB 中TableA。
- 应用程序运行
INSERT INTO TableA@@identity - 在
TableA上运行的ON INSERT触发器,然后将数据插入TableB@@identity - 应用程序读取
@@identityTableB 而不是来自TableA应用程序所期望的
有什么方法可以不更新触发器内的@@identity?
【问题讨论】:
-
没有办法阻止这种情况发生。这是你永远不应该使用@@identity 的一个重要原因。
-
是的,我知道 :) 第三方应用程序!
-
一个非常非常(不,非常严重非常)丑陋的解决方法:在导致
@@identity的触发器结束时(进入某个临时表)发出INSERT设置为所需的值。或者,也许更简洁但更多的工作,考虑一个INSTEAD OF触发器反转INSERTs 的顺序,以便实际的最后完成。 -
“第 3 方应用程序”通常意味着法律不允许您修改架构。添加触发器就是这样的修改 - 小心!
标签: sql-server triggers