从标记为复制的SQL表中删除行

时间:2020-03-05 18:58:56  来源:igfitidea点击:

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

这造成了以下问题:
Delete操作在客户端上将行标记为要删除,但是DTS操作绕过了复制触发器,因此导入的行未标记为在订户上插入。实际上,订户丢失了数据,尽管该数据在发布者上。

因此,我认为"不用担心",我将再次删除行,然后通过插入语句正确添加它们,然后将其标记为在订户上插入。

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

编辑:我已经尝试过截断表命令。这给出了以下错误"由于为发布而发布表,因此无法截断表xxxx"

解决方案

回答

我们是否尝试过削减桌子?

回答

如果我们需要插入的行具有相同的ID,则可能必须截断该表并将ID字段重置为0。如果不是这样,只需截断它就可以了。

回答

我们还可以考虑暂时删除唯一索引,并在完成后将其重新添加。

回答

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

我没有在复制环境中尝试过第一手……但这可能至少值得一试。

回答

调查sp_mergedummyupdate

回答

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

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

我有点担心回合摆弄合并触发器,但是一切似乎都正常运行。