2016-05-31 6 views
0

SQLテーブルにデータを挿入するSQLストアド・プロシージャを作成しようとしています Table Aユニークな索引列がある場所Change_IDTable Bにあります。 選択クエリがソーステーブルTable Aから​​を返す場合があります。宛先テーブルTable Bにはすでに存在しています。この場合、プロシージャがCannot insert duplicate key row in object 'dbo.TableB' with unique indexをスローしてジョブが中止されるため挿入が失敗します。上記の場合 一意索引例外を持つ列の重複キー挿入の処理

は、私は例外をキャッチし、重複を削除するには、表Bに削除を実行し、

私は次のクエリを持っていると私はよく知っている可能性があり、表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 
+0

は、 'どこにtableAクエリに表BからBで選択キーをexists'ないを追加します。重複したキー・エラーに遭遇することはありません。 – xQbert

+0

も参照してください。http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update – PaulF

+0

@xQbertパフォーマンスの問題として、私はそれがそれぞれの列ごとに重複がないかチェックしてください。代わりに、私は例外処理を考えて – DoIt

答えて

0

あなたはあなたの挿入後に重複して試すことができます。 は多分これはあなたのために働く;)

MySql on duplicate

+1

重複して何かを更新したくない場合は、単に新しい行を削除して挿入したいのですが、重複したキーの例外がある場合にのみこれをしたいと思います。また、私はTSQLで重複して使用できるとは思わない – DoIt

関連する問題