我需要在 SQL 2005 中有大约 1500 万条记录的现有表中添加一个自动编号列。
你觉得需要多少时间?更好的方法是什么?
为了尽量减少影响,我将创建一个添加了标识列的新表,通过从旧表中选择插入到新表中,然后删除旧表并重命名新表。我将在下面给出一个基本大纲。可能需要额外的步骤来处理外键等。
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
真的很难说需要多长时间。
在我看来,最好的办法是带回生产数据库的副本,在开发环境中恢复它,然后在那里应用您的更改,看看需要多长时间。
从那里,您可以协调站点停机时间,或安排更新在用户未连接时运行。
除非是紧急情况:
要了解您需要多少停机时间,请还原到新数据库并在那里进行更改。
它不应该很长:它不仅取决于行数,还取决于每行中有多少数据。(SQL Server 将复制整个表。)
您是否可以选择备份生产数据库、在另一台服务器上应用更改以及更改连接字符串?您甚至可以在与原始服务器相同的服务器上恢复它,更改连接字符串并摆脱旧数据库。
如果磁盘空间有限,可能不可行。