我有以下场景:两个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不会知道这个版本。我也可以创建一个更新触发器。问题在于主键,两个表中的主键都不同。
有什么想法吗?谢谢!
答案 0 :(得分:1)
这种情况对于触发器来说看起来不太合适。如果由于某种原因在DB-B中插入失败,DB-A中的INSERT也将被回滚。您不能以“通用”方式编写触发器。触发器严重影响INSERT性能。如果由于某种原因,您在某些时间内没有触发器,那么您没有数据库同步的保证。
因此,如果两个数据库几乎实时同步,我建议进行事务复制。复制将已发布表中的所有更改从一个DB带到另一个DB,并使数据保持同步。源数据库和目标数据库中的表具有相同的结构。因此,如果DB-B中的表不同,则无效。
如果不需要实时,您可以创建存储过程以在数据库之间移动所需数据并按计划调用此SP。 SP将检查并将所有insert \ deletes \ updates从一个DB移动到另一个DB。在这种情况下,表结构可以在数据库之间有所不同。