Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách sao chép dữ liệu bảng khổng lồ vào một bảng khác trong SQL Server

Tôi đã gặp vấn đề tương tự, ngoại trừ tôi có một bảng với 2 tỷ hàng, vì vậy tệp nhật ký sẽ phát triển không có kết thúc nếu tôi làm điều này, ngay cả với mô hình khôi phục được đặt thành Ghi nhật ký hàng loạt:

insert into newtable select * from oldtable

Vì vậy, tôi hoạt động trên các khối dữ liệu. Bằng cách này, nếu quá trình truyền bị xen kẽ, bạn chỉ cần khởi động lại nó. Ngoài ra, bạn không cần tệp nhật ký lớn như bảng. Bạn cũng có vẻ nhận được I / O tempdb ít hơn, không rõ tại sao.

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

Bạn có thể cần thay đổi cách xử lý ID, điều này hoạt động tốt nhất nếu bảng của bạn được nhóm theo 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. MS-SQL có điều kiện AND / OR (thực hiện đánh giá ngắn mạch) không?

  2. SQL Server 2008 Chuỗi trống so với Không gian

  3. 5 mẹo hữu ích nhanh cho SQL Server Production DBAs

  4. Điểm kiểm tra cơ sở dữ liệu trong SQL Server

  5. Các vấn đề về hiệu suất với SQL Server 2012 Enterprise Edition theo cấp phép CAL