¿Tiene una columna de identidad indexada en la tabla de destino? Este es uno de los pocos casos en los que realmente me gusta usar un bucle WHILE. El problema principal con la solución en el enlace que publicaste es el mal uso del índice.
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
En los casos en los que tenga una clave sustituta (columna de identidad como clave principal), lo que no es tan raro, esto provocaría una búsqueda de índice simple en la clave principal y se puede ajustar simplemente por la cantidad de crecimiento (5000 en el ejemplo)