将自动编号添加到具有超过1500万条记录的SQL列

时间:2010-09-28 19:21:17

标签: sql sql-server large-data-volumes

我需要在现有表中添加一个自动编号列,该表在SQL 2005中有大约1500万条记录。

你认为需要多少时间?有什么更好的方法呢?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

很难说需要多长时间。

在我看来,您最好的选择是带回生产数据库的副本,在开发环境中恢复它,并在那里应用您的更改以查看需要多长时间。

从那里,您可以协调网站停机时间,或安排更新在用户未连接时运行。

答案 2 :(得分:2)

除非是紧急情况:

  1. 不要更改实时数据库。
  2. 请勿对实时数据库进行更改。
  3. 要了解您需要多少停机时间,请执行还原到新数据库并在那里进行更改。

    它不应该很长:它不仅取决于行数,还取决于每行中有多少数据。 (SQL Server将整个表复制过来。)

答案 3 :(得分:0)

您是否可以选择备份生产数据库,在其他服务器上应用更改并更改连接字符串?您甚至可以在与原始服务器相同的服务器上恢复它,更改连接字符串并删除旧数据库。

如果磁盘空间有限,则可能无法实现。