Tsql Sybase抱怨在不存在重复插入的情况下重复插入

Tsql Sybase抱怨在不存在重复插入的情况下重复插入,tsql,sybase,Tsql,Sybase,我已将一些记录从DB_1中的源表移动到另一个DB_2中的存档表中(即,将源中的记录插入存档,然后从源中删除记录) “我的源”表的以下索引创建为SOURCE\u 1: CREATE UNIQUE NONCLUSTERED INDEX SOURCE_1 ON dbo.SOURCE(TRADE_SET_ID, ORDER_ID) 问题是-当我尝试将行从存档插入到源中时,Sybase抛出以下错误: Attempt to insert duplicate key row in object 'S

我已将一些记录从DB_1中的源表移动到另一个DB_2中的存档表中(即,将源中的记录插入存档,然后从源中删除记录)

“我的源”表的以下索引创建为
SOURCE\u 1

CREATE UNIQUE NONCLUSTERED INDEX SOURCE_1
    ON dbo.SOURCE(TRADE_SET_ID, ORDER_ID)
问题是-当我尝试将行从存档插入到源中时,Sybase抛出以下错误:

Attempt to insert duplicate key row in object 'SOURCE' with unique index 'SOURCE_1'
当然,随后插入失败

我确认我的源表没有这些重复项,因为以下查询返回空:

select * from DB_1.dbo.SOURCE
join DB_2.dbo.ARCHIVE
on DB_1.dbo.SOURCE.TRADE_SET_ID = DB_2.dbo.ARCHIVE.TRADE_SET_ID
AND DB_1.dbo.SOURCE.ORDER_ID = DB_2.dbo.ARCHIVE.ORDER_ID
如果上面的查询没有返回任何内容,那么这意味着我没有违反对这两列的唯一索引约束,但是Sybase抱怨我违反了


有人知道为什么会发生这种情况吗?

如果Sybase在这方面与SQL Server类似(我比较熟悉),我会怀疑索引正在阻止插入。在复制到存档版本之前,请尝试在存档版本上禁用索引(以及任何其他索引或自动增量列),然后重新启用。Sybase可能会尝试为插入自动创建ID,这会干扰现有记录。

如果Sybase在这方面与SQL Server类似(我比较熟悉),我会怀疑索引正在阻止插入。在复制到存档版本之前,请尝试在存档版本上禁用索引(以及任何其他索引或自动增量列),然后重新启用。Sybase可能会尝试为插入自动创建ID,这会干扰现有记录。

我真的没有看到任何错误(除了在上次查询中,您的第一个条件是DB2而不是DB_2)。你没有任何未结交易或任何东西,是吗?一种可能性为空。Null只有一次是唯一的,并且不会被该查询找到。Adam-Ya这是一个错误,但没有打开的事务。我确实有空值,但我在其他表中也有空值,并且其他表没有问题。请阅读我的评论。Null是唯一的。在其他表中是否有多行为null。Blam-实际上,我刚刚执行了一个检查,这两列中的任何一列都不能为null,也没有这两列中的任何一列为null的行。我真的没有看到任何错误(除了在上一次查询中,您的第一个条件是DB2而不是DB_2)。你没有任何未结交易或任何东西,是吗?一种可能性为空。Null只有一次是唯一的,并且不会被该查询找到。Adam-Ya这是一个错误,但没有打开的事务。我确实有空值,但我在其他表中也有空值,并且其他表没有问题。请阅读我的评论。Null是唯一的。其他表中是否有多行为null。Blam-事实上,我刚刚执行了一个检查,这两列中的任何一列都不能为null,并且这两列中的任何一列都不能为null。这是一个非常有趣的命题。但是,如果我禁用然后启用索引,那么该索引不需要重建吗?该表是一个100多行的大型表…我不认为重新创建索引会让我的DBA非常高兴。不要担心在主表上禁用和重新启用索引,只在备份到的存档上禁用和重新启用索引。因为它是一个归档表,不太可能经常使用,所以额外的时间应该是最小的问题。这是一个非常有趣的命题。但是,如果我禁用然后启用索引,那么该索引不需要重建吗?该表是一个100多行的大型表…我不认为重新创建索引会让我的DBA非常高兴。不要担心在主表上禁用和重新启用索引,只在备份到的存档上禁用和重新启用索引。因为它是一个归档表,不太可能经常使用,所以额外的时间应该是最小的问题。