2010-09-28 32 views
1

我需要一個自動編號列添加到具有在SQL約15萬條記錄現有表SQLcolumn 2005添加一個自動編號,其擁有超過15萬條記錄

你認爲它有多少時間會採取?有什麼更好的方法來做到這一點?

+1

我想你是指一個身份專欄。桌子上還有什麼東西,有多少場地等等等等? – JNK 2010-09-28 19:22:14

+0

這是一個生產數據庫嗎?您是否在意停機時間,或者只是好奇需要多長時間? – LittleBobbyTables 2010-09-28 19:27:13

+0

是的,它是標識列。該表有40個字段,它有一個主鍵(不是標識列,它是自定義的)和三個外鍵以及大約一千五百萬條記錄。 – blue 2010-09-28 19:30:32

回答

3

爲了使影響最小化,我將創建一個添加了標識列的新表,通過從舊錶中選擇插入到新表中,然後刪除舊錶並重命名新的表。我將在下面給出一個基本概述。可能需要額外的步驟來處理外鍵等

create table NewTable (
    NewID int identity(1,1), 
    Column1 ... 
) 
go 

insert into NewTable 
    (Column1, ...) 
    select Column1, ... 
     from OldTable 
go 

drop table OldTable 
go 

exec sp_rename 'NewTable', 'OldTable' 
go 
+0

1 - 如果您使用WITH(TABLOCK)',取決於您的SQL Server版本,插入可能會更快(由於最小化日誌操作)。 2 - 您可能希望批量嘗試此操作以防止超出tempdb – JNK 2010-09-28 19:54:31

+1

好主意,但我將在開發服務器中恢復生產數據庫,並進行更改並查看要花費多少時間。 – blue 2010-09-28 20:40:41

2

真的很難說需要多長時間。

在我看來,你最好的選擇是帶回一份生產數據庫的副本,在開發環境中恢復它,然後在那裏應用你的改變,看看它需要多長時間。

從那裏,您可以協調站點停機時間,或安排更新在用戶未連接時運行。

2

除非是緊急情況:

  1. 請勿更改到實時數據庫。
  2. 請勿更改實時數據庫。

要了解您需要多少停機時間,請執行恢復到新數據庫並在此處進行更改。

它不應該很長:它不僅取決於多少行,而且還取決於每行中有多少數據。 (SQL Server將複製整個表。)

0

您是否可以選擇備份生產數據庫,在其他服務器上應用更改並更改連接字符串?您甚至可以在與原始服務器相同的服務器上恢復它,更改連接字符串並擺脫舊的數據庫。

如果磁盤空間有限,可能不可行。

相關問題