【发布时间】:2012-03-27 05:03:23
【问题描述】:
我需要将插入/更新/删除操作从一个表镜像到另一个表。 例如,必须将 tableA 上的 insert 复制到 tableB 中,将 tableA 更新应用于 tableB,并将 tableA 中的删除应用于 tableB。 就这么简单,除了 tableB 有 1 个额外的列用于常量值,所以需要非常简单的触发器。
我不确定是编写 3 个单独的触发器更好,还是让一个触发器完成所有操作。
这适用于 3 个数据库:Sybase ASE、MSSQL 和 Oracle,我想让它保持相似的解决方案(因此所有数据库使用 3 个或所有数据库使用 1 个)。
3 个触发器与 1 个触发器只是偏好问题,还是这两种解决方案都有实际好处?
【问题讨论】:
-
您能否更新 tableB 的结构,使其仅引用 tableA 和附加列 - 这样您只存储一次数据。
-
你考虑过复制吗?
-
其实还有tableC,它的操作也镜像到了TableB中。附加字段包含有关从哪个表复制此行的信息。不过,我将不得不研究您发布的建议,但从技术上讲,我不确定如何执行其中任何一个建议。我希望只有一个表 (tableB),并且没有 tableA 或 tableC,但是目前这不是一个选项,我们有旧代码更新 tableA 和 tableC。
-
@Alex - 应该很可能有一个表并创建名为
tableA和tableC的视图,您的旧代码可以在其上执行 DML。那么您将只有一份数据副本。您可能需要在视图上设置触发器以使其可更新,但如果这些视图只是选择基表中的列子集并且基表具有主键,则这种情况不太可能发生。
标签: sql-server database oracle triggers sap-ase