Heeft u een geïndexeerde identiteitskolom in de doeltabel? Dit is een van de weinige gevallen waarin ik echt graag een WHILE-lus gebruik. Het grootste probleem met de oplossing in de link die je hebt gepost, is slecht indexgebruik.
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
In gevallen waarin u een surrogaatsleutel heeft (identiteitskolom als primaire sleutel), wat niet zo ongewoon is, zou dit een eenvoudige indexzoekactie op de primaire sleutel veroorzaken en is eenvoudig aan te passen door het groeibedrag (5000 in het voorbeeld)