2014-11-06 69 views
0

通過簡單的UPDATE聲明,我們可以在處理大型表時分批處理。是否可以使用TSQL「合併」語句執行批處理操作?

WHILE 1 = 1 
BEGIN 
    UPDATE TOP (5000) 
      dbo.LargeOrders 
    SET  CustomerID = N'ABCDE' 
    WHERE CustomerID = N'OLDWO'; 

    IF @@rowcount < 5000 
     BREAK; 
END 

在使用MERGE聲明時,是否可以做類似的事情?據我所知這是不可能的,因爲你需要根據條件做不同的操作。例如,匹配時爲UPDATE,匹配時爲INSERT。我只想確認一下,如果確實如此,我可能需要切換到老派UPDATE & INSERT

回答

2

爲什麼不使用臨時表作爲MERGE的源,然後通過源表處理批處理。我在我的一個項目中做到這一點,我將批量50,000行到臨時表中,然後使用臨時表作爲MERGE的源。我在循環中執行此操作,直到處理完所有行。

臨時表可以是物理表或內存表。

+0

這是一種解決問題的方法。感謝您的建議。 – 2014-11-06 13:46:05

相關問題