SQL Server:如何添加新的标识列并使用ID填充列?

Ser*_*ejs 56 sql sql-server cursor primary-key

我有一张包含大量数据的表格.我想添加额外的列id并将其用作主键.使用1 1到1的值填充此列的更好方法是什么row count

目前我正在使用游标并逐个更新行.这需要几个小时.有没有办法更快地做到这一点?

谢谢

mar*_*c_s 123

就这样做:

ALTER TABLE dbo.YourTable
ADD ID INT IDENTITY(1,1)
Run Code Online (Sandbox Code Playgroud)

并且将创建该列并自动填充integer值(正如Aaron Bertrand在他的评论中指出的那样 - 您无法控制哪一行获得什么值 - SQL Server自己处理它并且您无法影响它.但是所有行都将获得有效值int- 不会有任何NULL或重复的值).

接下来,将其设置为主键:

ALTER TABLE dbo.YourTable
ADD CONSTRAINT PK_YourTable PRIMARY KEY(ID)
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢id.WidgetID听起来像一个外键.所以我希望他没有 (17认同)
  • @KM. - 这是争论的焦点.表'Person`是否应该有一个名为`ID`的PK或称为'PersonID`.没有答案,它是偏好,环境标准,但肯定不是普遍认同的. (15认同)
  • @Dems我的个人意见是它应该是`PersonID`,无论它被引用的模式在哪里.但这是对不同问题的讨论,可能不在本网站上.:-) (9认同)
  • @Blorgbeard,我们的想法是你最终在多个表中使用"ID"列作为外键.因此,在两个表中具有相同的列名(PersonID)是很好的.在具有许多表和大量tsql代码的大型系统中,外键具有不同名称的情况可能非常痛苦. (9认同)
  • @KM我希望你不要在每个列前面加上表的名称..如果是`PersonID`,那么为什么不是`PersonFirstName`,`PersonLastName` ..? (4认同)
  • @KM.使用表名或别名进行前缀是更清洁的方法恕我直言. (3认同)
  • +1,但我希望OP命名为更具描述性的东西,然后`ID`就像`WidgetID`等. (2认同)