Har du en indekseret identitetskolonne i måltabellen? Dette er et af de få tilfælde, hvor jeg faktisk godt kan lide at bruge en WHILE loop. Hovedproblemet med løsningen i det link, du postede, er dårligt indeksbrug.
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
I tilfælde, hvor du har en surrogatnøgle (identitetskolonne som primærnøgle), hvilket ikke er så ualmindeligt, ville dette forårsage en simpel indekssøgning på primærnøglen og kan justeres blot med vækstbeløbet (5000 i eksemplet)