2016-05-31 76 views
0

我想創建一個SQL存儲過程,計劃每天運行,它負責將數據插入到SQL表中Table BTable A其中有一個唯一的索引列在Table B中命名爲Change_ID。 但某些情況下,選擇查詢從源表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

添加'那裏不是從表B到表A查詢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

相關問題