У меня была такая же проблема, за исключением того, что у меня есть таблица с 2 миллиардами строк, поэтому файл журнала будет расти до бесконечности, если я это сделаю, даже если для модели восстановления задано Bulk-Logging:
insert into newtable select * from oldtable
Так что я оперирую блоками данных.Таким образом, если передача прервана, вы просто перезапустите ее.Кроме того, вам не нужен файл журнала размером с таблицу.Похоже, вы также получаете меньше ввода-вывода tempdb, но не знаете почему.
set identity_insert newtable on
DECLARE @StartID bigint, @LastID bigint, @EndID bigint
select @StartID = isNull(max(id),0) + 1
from newtable
select @LastID = max(ID)
from oldtable
while @StartID < @LastID
begin
set @EndID = @StartID + 1000000
insert into newtable (FIELDS,GO,HERE)
select FIELDS,GO,HERE from oldtable (NOLOCK)
where id BETWEEN @StartID AND @EndId
set @StartID = @EndID + 1
end
set identity_insert newtable off
go
Возможно, вам придется изменить способ работы с идентификаторами, это лучше всего работает, если ваша таблица сгруппирована по идентификатору.