База данных: 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, и этот подход обновляет одну строку за раз, что занимает слишком много времени.
Есть ли подход, который может ускорить копирование значений из одного столбца в другой. В основном я ищу какое-то «волшебное» ключевое слово или логику, которая позволит запросу на обновление последовательно просканировать миллиард строк по полмиллиона за раз.
Мы будем очень благодарны за любые подсказки, указатели.