通用插入触发器

时间:2014-12-19 12:32:50

标签: sql-server database

我有以下场景:两个SQL Server 2008数据库(比方说DB-A和DB-B)。在这两个我有很多o表。对于DB-A上的一些表,我需要将一些插入的记录(基于条件)复制到DB-B上的同一个表中。当然,两个表都需要具有相同的结构。我最初的方法是在表FROM DB-A上创建Insert的触发器,以根据条件将recors复制到DB-B。现在我有两个问题:

1)有没有办法以通用的方式编写这些触发器(没有明确的字段名称)?

这是因为将来很有可能我需要在表中添加字段,我不想每次都修改触发器。

2)如何在编辑DB-A的记录时确保更新DB-B?

DB-A的记录可以在插入后编辑,因此DB-B不会知道这个版本。我也可以创建一个更新触发器。问题在于主键,两个表中的主键都不同。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

这种情况对于触发器来说看起来不太合适。如果由于某种原因在DB-B中插入失败,DB-A中的INSERT也将被回滚。您不能以“通用”方式编写触发器。触发器严重影响INSERT性能。如果由于某种原因,您在某些时间内没有触发器,那么您没有数据库同步的保证。

因此,如果两个数据库几乎实时同步,我建议进行事务复制。复制将已发布表中的所有更改从一个DB带到另一个DB,并使数据保持同步。源数据库和目标数据库中的表具有相同的结构。因此,如果DB-B中的表不同,则无效。

如果不需要实时,您可以创建存储过程以在数据库之间移动所需数据并按计划调用此SP。 SP将检查并将所有insert \ deletes \ updates从一个DB移动到另一个DB。在这种情况下,表结构可以在数据库之间有所不同。