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 に答える