Czy masz indeksowaną kolumnę tożsamości w tabeli docelowej? To jeden z niewielu przypadków, w których lubię używać pętli WHILE. Głównym problemem z rozwiązaniem w przesłanym linku jest złe użycie indeksu.
DECLARE @START INT, @FINISH INT, @LOOPEND INT
SELECT @START = 1, @FINISH = 5000, @LOOPEND = MAX(ID)
from Bla
WHILE @START <= @LOOPEND
BEGIN
update a
set XML = b.xml
from Bla as a
inner join #temp as b on a.i = b.i
WHERE a.ID BETWEEN @START AND @FINISH
SET @START = @FINISH + 1
SET @FINISH = @FINISH + 5000
END
W przypadkach, w których masz klucz zastępczy (kolumna tożsamości jako klucz podstawowy), co nie jest tak rzadkie, spowodowałoby to proste wyszukiwanie indeksu na kluczu podstawowym i można je regulować po prostu o wielkość wzrostu (w przykładzie 5000)