2

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

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

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

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

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

4

6 回答 6

2

您是否尝试过截断表格?

于 2008-09-17T14:01:08.977 回答
2

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

于 2008-09-17T14:03:51.590 回答
1

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

于 2008-09-17T14:09:21.280 回答
1

查看 sp_mergedummyupdate

于 2008-09-17T15:37:25.953 回答
0

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

我没有在复制环境中亲身尝试过……但至少值得一试。

于 2008-09-17T15:34:18.940 回答
0

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

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

我有点担心摆弄合并触发器,但每件事似乎都正常工作。

于 2008-09-17T15:48:24.540 回答