SQLテーブルにデータを挿入するSQLストアド・プロシージャを作成しようとしています Table A
ユニークな索引列がある場所Change_ID
がTable B
にあります。 選択クエリがソーステーブルTable A
からを返す場合があります。宛先テーブルTable B
にはすでに存在しています。この場合、プロシージャがCannot insert duplicate key row in object 'dbo.TableB' with unique index
をスローしてジョブが中止されるため挿入が失敗します。上記の場合 一意索引例外を持つ列の重複キー挿入の処理
私は次のクエリを持っていると私はよく知っている可能性があり、表Aから行を挿入しようとしていますこのシナリオを処理する方法。
BEGIN TRY
insert into TableB
( change_id
, item_id
, class
, subclass
, start_date
, end_date
)
select
change_id
, item_id
, class
, subclass
, start_date
, end_date
from openquery(ORA,'select * from TableA where start_date >= next_day(trunc(sysdate)-5,''MONDAY'')')
END TRY
BEGIN CATCH
--
END CATCH
は、 'どこにtableAクエリに表BからBで選択キーをexists'ないを追加します。重複したキー・エラーに遭遇することはありません。 – xQbert
も参照してください。http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update – PaulF
@xQbertパフォーマンスの問題として、私はそれがそれぞれの列ごとに重複がないかチェックしてください。代わりに、私は例外処理を考えて – DoIt