我错误地删除了合并复制中使用的 MS SQL 2000 表中的所有行(该表位于发布者上)。然后,我使用 DTS 操作从备份数据库检索行并重新填充表,从而使问题变得更加复杂。

这产生了以下问题:删除操作在客户端上将行标记为删除,但 DTS 操作绕过复制触发器,因此导入的行不会在订阅者上标记为插入。实际上,订阅者会丢失数据,尽管数据位于发布者上。

所以我想“不用担心”,我将再次删除这些行,然后通过插入语句正确添加它们,然后将它们标记为插入订阅者。

这是我的问题:我无法删除dtsed行,因为我会在对象'msmerge_tombstone'中使用唯一索引'uc1msmerge_tombstone'中插入重复的键行。”错误。我想做的是以某种方式从表中删除行,绕过合并复制触发器。这可能吗?我不想删除并重做复制,因为订阅者有 50 多个 Windows 移动设备。

编辑:我尝试过截断表命令。这会出现以下错误“无法截断表 xxxx,因为它是为复制而发布的”

有帮助吗?

解决方案 6

感谢您的提示...我最终找到了解决方案:

我从表中删除了合并删除触发器
删除了 DTS 行
重新创建合并删除触发器
使用插入语句正确添加我的行。

我有点担心摆弄合并触发器,但一切 出现 才能正常工作。

其他提示

您是否尝试过截断表格?

如果您需要插入的行具有相同的 ID,您可能必须截断表并将 ID 字段重置回 0。如果没有,只需截断就可以了。

您还可以考虑暂时删除唯一索引并在完成后将其添加回来。

查看 sp_mergedummyupdate

创建第二个表是一种选择吗?您可以创建第二个表,用所需的数据填充它,添加约束/索引,然后删除第一个表并重命名第二个表。这应该为您提供带有正确键的数据...并且它应该全部包含允许滴入复制的 SQL 语句。它只是可能不是最好的性能......并且肯定会带来一些风险。

我还没有在复制环境中亲自尝试过......但它至少值得尝试。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top