更新表作为另一个数据库中的同一表更改

时间:2018-01-03 07:27:04

标签: sql-server database tsql database-trigger

我在一个SQL Server实例中有两个数据库,它们具有相同的结构。 现在我想为数据库中的某些表编写一些触发器,以便在插入,更新或删除记录时相互同步。

下面的内容将成为触发器之一:


CREATE TRIGGER AdminMessage_Insert
ON AdminMessage
AFTER INSERT
AS
INSERT INTO SecondDb.dbo.AdminMessage
        ( ID ,
          DeptKey ,
          AdminKey ,
          ReceiverKey ,
          MessageText ,
          IsActive
        )
SELECT i.ID, i.DeptKey, i.AdminKey, i.ReceiverKey, i.MessageText, i.IsActive
FROM INSERTED i

所以我的问题是有很多表,并且每个表的三个触发器的编写似乎不是最好的解决方案。

你能给我一个更好更小的方法吗?

更新

我找到了一些方法,例如 CDC 更改跟踪 SQL审核以及复制(快照复制)并阅读它们。 据我所知,对我来说最好的解决方案是使用'CDC'或'审计'。 在他们两个人中,我必须逐一处理每张桌子,这需要我很长时间。

我可以用更少的工作和一个SQL实例来更改所有表吗? (复制很好,但它需要多个实例)

你的想法是什么?

2 个答案:

答案 0 :(得分:1)

虽然变更数据捕获(CDC)并未设计为用作某种复制,但我们在公司以这种方式使用它,因为它适用于我们。您为仅获取净更改所需的特定表启用CDC。然后将记录存储在CDC创建的数据库中。从那里,您可以将更改推送到其他数据库。您可以找到有关CDC here的更多信息。

答案 1 :(得分:0)

因为您似乎正在寻找仅以一种方式复制数据的解决方案,我可以假设第二个源是只读的吗?如果是这样,并且因为您说两个数据库都在同一个实例上,则可以在辅助数据库中使用synonyms