2017-08-14 109 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

相關問題