1

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

我的 SOURCE 表具有以下索引创建为SOURCE_1

CREATE UNIQUE NONCLUSTERED INDEX SOURCE_1
    ON dbo.SOURCE(TRADE_SET_ID, ORDER_ID)

问题是 - 当我尝试将行从 ARCHIVE 插入回 SOURCE 时,Sybase 抛出以下错误:

Attempt to insert duplicate key row in object 'SOURCE' with unique index 'SOURCE_1'

而且,当然,随后插入失败。

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

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

如果上面的查询没有返回任何内容,那么这意味着我没有违反我对 2 列的唯一索引约束,但是 Sybase 抱怨说我有。

有没有人知道为什么会这样?

4

1 回答 1

1

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

于 2012-10-04T20:58:41.083 回答