问答中心分类: SQLSQL Server向现有表添加自动递增主键
0
匿名用户 提问 1月 前

作为标题,我有一个已经填充了150000条记录的现有表。我添加了一个Id列(当前为空)。
我假设我可以运行一个查询,用增量数字填充此列,然后设置为主键并启用自动增量。这是正确的方法吗?如果是这样,我该如何填写初始数字?

14 Answers
0
gbn 回答 1月 前

您不能“打开”标识:这是一个表重建。
如果您不关心数字顺序,那么可以一次性添加带有标识的列,而不是NULL。15万排并不多。
如果需要保留一些数字顺序,则相应地添加数字。然后使用SSMS表设计器设置IDENTITY属性。这允许您生成一个脚本,该脚本将为您执行列删除/添加/保留数字/重新设定种子。

Martin Smith 回复 1月 前

OP在SQL Server 2008上所以有一种方法

Martin Smith 回复 1月 前

整个实例需要在单用户模式下启动,因此在大多数情况下可能不可行,但ALTER TABLE ... SWITCH我可以不用它。

0
Kevin 回答 1月 前

我有这个问题,但无法使用身份栏(出于各种原因)。

DECLARE @id INT
SET @id = 0 
UPDATE table SET @id = id = @id + 1

借用自在这里.

0
Renzo Ciot 回答 1月 前

如果该列已存在于表中且为空,则可以使用以下命令更新该列(replace id、tablename和tablekey):

UPDATE x
SET x.<Id> = x.New_Id
FROM (
  SELECT <Id>, ROW_NUMBER() OVER (ORDER BY <tablekey>) AS New_Id
  FROM <tablename>
  ) x
Kristen Waite 回复 1月 前

你用这个节省了我的时间!对@gbn答案的良好补充。

0
user3279092 回答 1月 前

当我们在现有表中添加和标识列时,它将自动填充,无需手动填充。

0
KJN 回答 1月 前

这个答案是投票率最高答案的一个小补充,适用于SQL Server。问题要求自动递增主键,当前答案确实添加了主键,但未标记为自动递增。下面的脚本检查列是否存在,并在启用自动增量标志的情况下添加。

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTable' AND COLUMN_NAME = 'PKColumnName')
BEGIN


ALTER TABLE dbo.YourTable
   ADD PKColumnName INT IDENTITY(1,1)

CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED

END

GO
Sarz 回复 1月 前

这太可悲了,帖子上有很多投票,你的答案对我来说是百分之百的,希望我能增加更多的投票