Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从标记为复制的SQL表中删除行_Sql Server_Sql Server 2000_Replication - Fatal编程技术网

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

Sql server 从标记为复制的SQL表中删除行,sql-server,sql-server-2000,replication,Sql Server,Sql Server 2000,Replication,我错误地删除了合并复制中使用的MS SQL 2000表中的所有行(该表位于发布服务器上)。然后,我使用DTS操作从备份数据库检索行并重新填充表,从而使问题更加复杂 这造成了以下问题: 删除操作在客户端上将行标记为删除,但DTS操作绕过复制触发器,因此导入的行不会标记为在订阅服务器上插入。实际上,订阅者会丢失数据,尽管数据在发布服务器上 所以我想“不用担心”,我将再次删除这些行,然后通过insert语句正确添加它们,然后它们将被标记为在订阅服务器上插入 这是我的问题: 我无法删除DTSed行,因为

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

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

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

这是我的问题: 我无法删除DTSed行,因为我得到一个“无法在具有唯一索引“uc1MSmerge_tombstone”的对象“MSmerge_tombstone”中插入重复的键行”错误。我想做的是绕过合并复制触发器从表中删除行。这可能吗?我不想删除并重做复制,因为订阅服务器是50多台windows mobile设备


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

是否尝试截断该表?

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

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

是否可以选择创建第二个表?您可以创建第二个表,用所需的数据填充它,添加约束/索引,然后删除第一个表并重命名第二个表。这将为您提供具有正确密钥的数据……并且它应该全部由SQL语句组成,这些SQL语句允许在复制过程中进行滴流。这可能不是最好的性能…而且肯定会带来一些风险


我还没有在复制环境中尝试过这一方法……但至少值得一试。

查看sp\u mergedummyupdate

谢谢您的提示……我最终找到了一个解决方案:

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


我有点担心如何处理合并触发器,但所有的似乎都正常工作。

好主意…但我确实这样做了…我得到了一个“无法截断表,因为它是为复制而发布的。”错误。唯一索引在合并表上。我担心会弄糟这件事。