1

insert次の簡単な句を使用して、数百万行を挿入しています。

insert into DEST_TABLE
select *
from SRC_TABLE

ただし、挿入中に重複が発生する可能性があり、エラーが発生し、操作全体が終了します。

挿入操作を最初から最後まで実行し、重複した挿入エラー(別名)から中断しない方法はありますか?重複する挿入エラーを無視して挿入しませんか?

4

4 に答える 4

2

問題をすべて回避し、事前に除外することをお勧めします。

insert into DEST_TABLE
select *
from SRC_TABLE
EXCEPT
select *
from DEST_TABLE
于 2012-10-10T21:20:30.820 に答える
1

これらは、重複行を処理する方法です。

  1. 制約を削除して行を挿入します。次に、重複を削除するには、オプション ignore_dup_row を使用してテーブルにクラスター化インデックスを作成します

  2. すべての制約を削除し、オプション ignore_dup_row を使用して、テーブルにクラスター化されたインデックスを作成します。行が重複している場合は挿入されません。

于 2012-10-11T09:50:13.333 に答える
0

たぶん、どこの条項が良いでしょうか?

insert into DEST_TABLE
select *
from SRC_TABLE S
where not exists
      (
         select 1
         from DEST_TABLE D
         where D.id=S.id
      )
于 2012-10-10T21:09:11.990 に答える
0

重複挿入エラーは、の制約からのみ発生する可能性がありますDEST_TABLE

したがって、DEST_TABLEの制約を削除し、データを挿入してクリーンアップし、制約を元に戻します。

にすでにデータがある場合、これは問題になる場合がありますDEST_TABLE

SELECTもう1つの(より良い)解決策は、句を変更することにより、重複することなくデータを取得することです。

于 2012-10-10T21:07:27.107 に答える