【发布时间】:2012-03-13 23:07:00
【问题描述】:
我有一张包含大量数据的表格。我想添加额外的列 id 并将其用作主键。用1 到row count 的值填充此列的更好方法是什么
目前我正在使用游标并一一更新行。这需要几个小时。有没有办法更快?
谢谢
【问题讨论】:
标签: sql sql-server primary-key database-cursor
我有一张包含大量数据的表格。我想添加额外的列 id 并将其用作主键。用1 到row count 的值填充此列的更好方法是什么
目前我正在使用游标并一一更新行。这需要几个小时。有没有办法更快?
谢谢
【问题讨论】:
标签: sql sql-server primary-key database-cursor
就这样吧:
ALTER TABLE dbo.YourTable
ADD ID INT IDENTITY(1,1)
并且该列将被创建并自动填充integer 值(正如 Aaron Bertrand 在他的评论中指出的那样 - 您无法控制哪一行获得什么值 - SQL Server 自己处理它并且你不能影响它。但所有行都会得到一个有效的 int 值 - 不会有任何 NULL 或重复值)。
接下来,将其设置为主键:
ALTER TABLE dbo.YourTable
ADD CONSTRAINT PK_YourTable PRIMARY KEY(ID)
【讨论】:
Person 是否应该有一个名为ID 或PersonID 的PK。没有答案,是偏好、环境标准,但肯定不是普遍认同的。
PersonID。但这是一个不同问题的讨论,可能不在这个网站上。 :-)
PersonID,那为什么不也PersonFirstName,PersonLastName..?
如果您想按特定顺序添加行号,您可以将 ROW_NUMBER() 执行到新表中,然后删除原始表。但是,根据表大小和其他业务限制,您可能不想这样做。这也意味着存在您希望对表格进行排序的逻辑。
SELECT ROW_NUMBER() OVER (ORDER BY COL1, COL2, COL3, ETC.) AS ID, *
INTO NEW_TABLE
FROM ORIGINAL_TABLE
【讨论】: