SQL Server 事务复制 - 订阅者与发布者上的 MERGE 命令的行为

Rya*_*eir 5 replication sql-server-2008 sql-server

背景

我有两个运行在两台不同机器上的 SQL 服务器实例:

一个是发布者,另一个是单个(大型)数据库的订阅者。复制类型是事务性的。

它们都从我复制的数据库的相同快照开始。

我有一个运行在发布者机器上的实用程序,它针对它执行 SQL 命令(都是插入、更新、删除)。然后将这些更改推送给订阅者。

我想知道我是否能够 TRUNCATE 发布者数据库中的数据,以便它具有较低的开销(我想要的是复制能力,只要它,我就不会关心复制发布者中的实际数据将其发送给订阅者)。

如果我执行上述操作并修改我的实用程序,该实用程序执行将 INSERTS 和 UPDATES 转换为 MERGE 命令的命令,数据是否会正确复制到所有订阅者?


示例场景:

我的实用程序将执行的原始命令:

更新日历 SET active = 0 WHERE id = 1932

  1. 发布者数据库没有 ID 为 1932 的日历记录,因为我截断了它,所以更新将影响零记录。

  2. 但是订阅者数据库确实有一个 ID 为 1932 的日历记录。

  3. 如果我的实用程序将上面的 UPDATE 转换为 MERGE,即使它在发布者上作为 INSERT 执行,但在订阅者上作为 UPDATE 执行,更改是否会被推送到订阅者数据库?


提前致谢。

mrd*_*nny 5

如果您在发布者上截断表,事务日志中的记录将是一个插入,因此将对订阅者执行插入。

现在您可以做的是修改复制在订阅者处使用的存储过程,以便当插入过程触发时,它首先查看记录是否存在,如果存在则进行更新,如果不存在则进行更新插入。