我的項目必須處理龐大的數據庫。在最壞的情況下,它可以是超過80百萬行。更新或插入SQL Server時忽略錯誤行
現在,我有2個表T1
和T2
。我必須將數據從表T1
複製到表T2
- 如果表
T1
一個行表T2
(同一主鍵)已經存在,則更新T1
該行的其他列數據T2
- 否則插入新行到
T2
起初,我用while循環遍歷80個百萬行T1
然後更新或插入到T2
。這非常非常慢,完成需要超過10個小時。但是,如果任何行導致錯誤,我可以忽略它,並捕捉錯誤。
在那之後,我喜歡用一個查詢:
update Table2
set T2.Column1 = T1.Column1,T2.Column2=T1.Column2
from Table2 T2 JOIN Table1 T1 ON T1.ID=T2.ID
這是更快,只需要大約1> 2小時完成。但是,如果任何行有錯誤,則查詢根本無法執行。
所以,我的問題是:
有什麼辦法,上面的查詢可以忽略錯誤行並繼續有效行執行?
如果沒辦法,我可以做到這一點,我能做些什麼來比第一種方法運行更快,也可以捕獲錯誤行?
P/S:我試圖將表拆分到多個小部分,然後更新或在同一時間插入所有小部分,但它確實不是更快的。
我已經用我的第二種方法解決了這個問題。在插入或更新行時,我使用TRY_CAST來防止發生異常。任何無效的數據都將爲NULL。完成後,我比較2個表並找到不同的行。這些行是錯誤行。
謝謝。運行這些錯誤:Msg 4104,Level 16,State 1,Line 7 無法綁定多部分標識符「SOURCE.ID」。 – user2500561
你可以檢查你的select語句是否在「unsing」中一起工作。它可能發生的錯誤將會重複。如果它會 - 比你應該在你的SELECT中尋找問題 –
謝謝。我用第二種方法解決了這個問題。在插入或更新行時,我使用TRY_CAST來防止發生異常。任何無效的數據都將爲NULL。完成後,我比較2個表並找到不同的行。這些行是錯誤行。 – user2500561