Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да копирате огромни данни от таблица в друга таблица в SQL Server

Имах същия проблем, с изключение на това, че имам таблица с 2 милиарда реда, така че регистрационният файл няма да нарасне до безкрай, ако направя това, дори и с модела за възстановяване, зададен на Bulk-Logging:

insert into newtable select * from oldtable

Така че оперирам с блокове данни. По този начин, ако прехвърлянето е прекъснато, просто го рестартирате. Освен това не се нуждаете от регистрационен файл, голям колкото таблицата. Освен това изглежда получавате по-малко tempdb I/O, не знам защо.

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

Може да се наложи да промените начина, по който се справяте с идентификаторите, това работи най-добре, ако таблицата ви е групирана по ID.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server - Включете NULL, като използвате UNPIVOT

  2. Как да закръглите (НАГОРЕ/НАДОЛУ) в SQL Server – 5 полезни съвета

  3. Поведение на плана за заявка за темпорална таблица на SQL Server 2016

  4. как да напиша функция число към word в sql сървър

  5. Намерете всички таблици, съдържащи колона с посочено име - MS SQL Server