Apakah Anda memiliki kolom identitas terindeks di tabel target? Ini adalah salah satu dari sedikit kasus di mana saya sebenarnya suka menggunakan loop WHILE. Masalah utama dengan solusi di tautan yang Anda posting adalah penggunaan indeks yang buruk.
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
Dalam kasus di mana Anda memiliki kunci pengganti (kolom identitas sebagai kunci utama), yang tidak biasa, ini akan menyebabkan pencarian indeks sederhana pada kunci utama dan dapat disesuaikan hanya dengan jumlah pertumbuhan (5000 dalam contoh)