sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan kopierer du store tabeldata til en anden tabel i SQL Server

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.



  1. ændre størrelsen på datatype i sql

  2. Nye Azure SQL Database Standard Tier Sizes

  3. Sådan ændres tabel i Oracle

  4. Postgresql -bash:psql:kommando blev ikke fundet