2017-08-14 200 views
0

我有1条000 000记录的表:如何将表格复制到另一个表格?

CREATE TABLE [dbo].[x2](
    [session_id] [uniqueidentifier] NOT NULL, 
    [node_id] [uniqueidentifier] NOT NULL, 
    [id] [int] IDENTITY(1,1) NOT NULL, 
CONSTRAINT [PK_x2] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)); 

我需要更换现场

[id] [int] IDENTITY(1,1) 

[id] [bigint] IDENTITY(1,1) 

但是,所有数据(包括ID值)应为复制到新表和id应该是IDENTITY但bigint。

我创建新表

CREATE TABLE [dbo].[x2_new](
    [session_id] [uniqueidentifier] NOT NULL, 
    [node_id] [uniqueidentifier] NOT NULL, 
    [id] [bigint] IDENTITY(1,1) NOT NULL, 
CONSTRAINT [PK_x2_new] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)); 

,并试图复制数据:

insert into x2_new(session_id,node_id,id) 
select session_id,node_id,id from x2; 

但它是缓慢的。如何更快地将数据复制到新表中?

+0

定义慢吗?在被索引的表上插入一百万条记录的速度不会像没有编入索引的表那样快,当然 – scsimon

+0

是的,但另一方面,这个查询从t选择到t1比插入()select ...来自。但我不能使用它,因为身份字段 – Oleg

+0

一个更快的方法是放弃约束和索引,并简单地改变表列的类型。 – scsimon

回答

0

在这种情况下..你需要做一个' identity_insert OFF',然后插入脚本。尝试设置NoLock ..但是这是一次性活动还是重复性活动?

0

如果同时你的表是在同一DATABSE,你为什么不使用导入数据任务功能,选择列,并立即运行SSIS包..

+0

至少是因为最后我需要一个脚本,它将提供给使用我的数据库的客户端。你看:我试图解决问题int身份溢出,以取代int身份 - > bigint身份 – Oleg

+0

在这种情况下..你需要做一个' identity_insert OFF '在你的目的地,并插入你的脚本..尝试设置NoLock当然,也可以投入到bigint ..但这是一次性活动还是重复性活动? – HappieFeet

+0

是的,这是一次性操作。原因是:身份INT不够,需要转换为身份BIGINT。这就是为什么我在我的db上测试这个操作,然后将脚本提供给客户端。 – Oleg

相关问题