Avez-vous une colonne d'identité indexée dans la table cible ? C'est l'un des rares cas où j'aime vraiment utiliser une boucle WHILE. Le principal problème avec la solution dans le lien que vous avez posté est une mauvaise utilisation de l'index.
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
Dans les cas où vous avez une clé de substitution (colonne d'identité comme clé primaire), ce qui n'est pas si rare, cela entraînerait une simple recherche d'index sur la clé primaire et est ajustable simplement par le montant de la croissance (5000 dans l'exemple)