我有一个包含 340 万行的表。我想将整个数据复制到另一个表中。
我正在使用以下查询执行此任务:
select *
into new_items
from productDB.dbo.items
我需要知道完成这项任务的最佳方法。
最佳答案
我遇到了同样的问题,只是我有一个包含 20 亿行的表,因此如果我这样做,即使将恢复模式设置为批量日志记录,日志文件也会无限增长:
insert into newtable select * from oldtable
所以我对数据 block 进行操作。这样,如果传输中断,您只需重新启动即可。此外,您不需要与表一样大的日志文件。您似乎也获得了更少的 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 的方式,如果您的表按 ID 进行集群,则此方法效果最佳。
关于sql - 如何将一个巨大的表数据复制到SQL Server中的另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5296106/