sql - 如何将一个巨大的表数据复制到SQL Server中的另一个表中

标签 sql sql-server sql-server-2005 copying

我有一个包含 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/

相关文章:

asp.net - 如何从 SQL 查询中过滤具有唯一 ID 的旧条目

javascript - 一次等待一个查询

sql-server - sql存储过程参数作为动态查询的参数

sql - 使用 Query 在 SQL Server 中查找所有使用游标的存储过程

sql - rails ActiveRecord find_by_sql 调用结果的列顺序

php - 将数据从 Android 发布并解析到 php

sql - 将行数据从一个表安全地插入到另一个表中 - SQL

sql - 如何: Manage multiple overlapping indexes in SQL Server 2005

sql - 从 Impala 中的时间戳值变量中提取日期

sql-server - 我可以安装 SQL Server 代理,但不能安装数据库实例吗?