Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara menyalin data tabel besar ke tabel lain di SQL Server

Saya memiliki masalah yang sama, kecuali saya memiliki tabel dengan 2 miliar baris, sehingga file log akan terus bertambah jika saya melakukan ini, bahkan dengan model pemulihan yang disetel ke Logging Massal:

insert into newtable select * from oldtable

Jadi saya beroperasi pada blok data. Dengan cara ini, jika transfer terputus, Anda tinggal memulainya kembali. Juga, Anda tidak memerlukan file log sebesar tabel. Anda juga tampaknya mendapatkan lebih sedikit tempdb I/O, tidak yakin mengapa.

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

Anda mungkin perlu mengubah cara Anda menangani ID, ini berfungsi paling baik jika tabel Anda dikelompokkan berdasarkan 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. Bagaimana cara melakukan GROUP BY yang peka huruf besar-kecil?

  2. Otomatiskan Pengambilan nomor Versi dari file .Dtsx

  3. Bagaimana cara mengeluarkan DateTime yang dapat dibatalkan dari database

  4. Fungsi SQL Server TRIM, LTRIM, dan RTRIM

  5. Bagaimana cara mengganti string di Kolom Tabel SQL Server