Скопировать один столбец в другой для более миллиарда строк в базе данных SQL Server

База данных: SQL Server 2005

Проблема: скопировать значения из одного столбца в другой столбец той же таблицы с миллиардом + rows.

test_table (int id, bigint bigid)

Что пробовали 1: запрос на обновление

update test_table set bigid = id 

заполняет журнал транзакций и откатывается из-за нехватки места в журнале транзакций.

Попытка 2 - процедура со следующими строками

set nocount on
set rowcount = 500000
while @rowcount > 0
begin
 update test_table set bigid = id where bigid is null
 set @rowcount = @@rowcount
 set @rowupdated = @rowsupdated + @rowcount
end
print @rowsupdated

Вышеупомянутая процедура начинает замедляться по мере его выполнения.

Попытка 3 - Создание курсора для обновления.

обычно не рекомендуется в документации по SQL Server, и этот подход обновляет одну строку за раз, что занимает слишком много времени.

Есть ли подход, который может ускорить копирование значений из одного столбца в другой. В основном я ищу какое-то «волшебное» ключевое слово или логику, которая позволит запросу на обновление последовательно просканировать миллиард строк по полмиллиона за раз.

Мы будем очень благодарны за любые подсказки, указатели.

9
задан OMG Ponies 22 September 2010 в 19:14
поделиться