Jeg havde det samme problem, bortset fra at jeg har en tabel med 2 milliarder rækker, så logfilen ville vokse til ingen ende, hvis jeg gjorde dette, selv med gendannelsesmodellen sat til Bulk-Logging:
insert into newtable select * from oldtable
Så jeg opererer på datablokke. På denne måde, hvis overførslen afbrydes, genstarter du den bare. Du behøver heller ikke en logfil så stor som bordet. Du ser også ud til at få mindre tempdb I/O, ved ikke hvorfor.
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
Du skal muligvis ændre, hvordan du håndterer ID'er, dette fungerer bedst, hvis din tabel er grupperet efter ID.