Bạn có cột nhận dạng được lập chỉ mục trong bảng mục tiêu không? Đây là một trong số ít trường hợp tôi thực sự thích sử dụng vòng lặp WHILE. Vấn đề chính với giải pháp trong liên kết bạn đã đăng là việc sử dụng chỉ mục không hợp lệ.
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
Trong trường hợp bạn có khóa thay thế (cột nhận dạng là khóa chính), điều này không quá phổ biến, điều này sẽ gây ra một tìm kiếm chỉ mục đơn giản trên khóa chính và có thể điều chỉnh đơn giản bằng số lượng tăng trưởng (trong ví dụ là 5000)