Haben Sie eine indizierte Identitätsspalte in der Zieltabelle? Dies ist einer der wenigen Fälle, in denen ich tatsächlich gerne eine WHILE-Schleife verwende. Das Hauptproblem bei der Lösung in dem von Ihnen geposteten Link ist die schlechte Indexnutzung.
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 Fällen, in denen Sie einen Ersatzschlüssel (Identitätsspalte als Primärschlüssel) haben, was nicht so ungewöhnlich ist, würde dies eine einfache Indexsuche auf dem Primärschlüssel verursachen und ist einfach durch den Wachstumsbetrag (5000 im Beispiel) einstellbar