Hai una colonna di identità indicizzata nella tabella di destinazione? Questo è uno dei pochi casi in cui mi piace usare un ciclo WHILE. Il problema principale con la soluzione nel link che hai pubblicato è un cattivo utilizzo dell'indice.
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
Nei casi in cui hai una chiave surrogata (colonna identità come chiave primaria), cosa non così rara, ciò causerebbe una semplice ricerca dell'indice sulla chiave primaria ed è regolabile semplicemente dall'importo della crescita (5000 nell'esempio)