如何在SQL Server数据库中添加自增主键?

61

我有一个表格,目前没有主键。我只需要添加一个主键,非空,自增

我正在使用Microsoft SQL Server数据库。我知道它不能在单个命令中完成,但我尝试的每个命令都返回语法错误。

编辑 ---------------

我已经创建了主键,并将其设置为非空。然而,我无法设置自增

我尝试过:

ALTER TABLE tableName MODIFY id NVARCHAR(20) auto_increment
ALTER TABLE tableName ALTER COLUMN id NVARCHAR(20) auto_increment
ALTER TABLE tableName MODIFY id NVARCHAR(20) auto_increment
ALTER TABLE tableName ALTER COLUMN id NVARCHAR(20) auto_increment

我使用 NVARCHAR 因为它不允许在 int 下设置 NOT NULL


1
为什么你不能简单地添加一个新的IDENTITY列? - ypercubeᵀᴹ
2
https://dev59.com/YW445IYBdhLWcg3wcJ2O - ypercubeᵀᴹ
有趣的是,auto_increment 语法来自哪里?是 Access 吗? - Kieren Johnstone
3
auto_increment 在 MYSQL 中被使用(可能也用于其他地方)。 - ypercubeᵀᴹ
6个回答

119

可以通过单个命令完成。您需要为“自动编号”设置IDENTITY属性:

ALTER TABLE MyTable ADD mytableID int NOT NULL IDENTITY (1,1) PRIMARY KEY

更准确地说,要设置一个有命名的表级约束:

ALTER TABLE MyTable
   ADD MytableID int NOT NULL IDENTITY (1,1),
   CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (MyTableID)

请见MSDN中的ALTER TABLE和IDENTITY


1
太好了!感谢您的帮助。一旦计时器允许,我会接受答案的。:D - dcp3450
7
可以,但正确的语法应该去掉第二个 "ADD",应该是:ALTER TABLE MyTable ADD MytableID int NOT NULL IDENTITY (1,1), CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (MyTableID) - Daniel Silva

21

如果表格已经包含数据,并且您想要将其中一个列更改为标识列:

首先创建一个具有相同列并指定主键列的新表格:

create table TempTable
(
    Id int not null identity(1, 1) primary key
    --, Other columns...
)

使用标准的insert语句将所有行从原表复制到新表。

然后删除原始表。

最后使用sp_renameTempTable重命名为您想要的任何名称:

http://msdn.microsoft.com/en-us/library/ms188351.aspx


这个创建表的语法是“良好实践”,正如帖子的作者在评论中建议的那样,希望能对某些人有所帮助。 - Shaiju T

13

您还可以通过SQL Server Management Studio执行此操作。

右键单击所选表 -> 修改

右键单击要设置为主键的字段 --> 设置主键

在“列属性”下将“标识规范”设置为是,然后指定起始值和增量值。

接下来,如果以后您想要仅脚本化此类操作,您可以右键单击刚修改的表,并选择

“SCRIPT TABLE AS” --> CREATE TO

这样您就可以自己查看执行此操作的正确语法了。


1
如果您有这个列,那么很容易。
使用设计器,您可以将该列设置为标识(1,1):右键单击表格→设计→在左侧部分(右键单击)→属性→在标识列中,选择#column。

属性:

enter image description here

身份列:

enter image description here


0
在 SQL Server 2008 中:
  • 右键点击表格
  • 进入设计模式
  • 选择数字数据类型
  • 为新列添加名称
  • 将标识规范设置为“是”

-1

你可以尝试这个...

ALTER TABLE Your_Table
 ADD table_ID int NOT NULL PRIMARY KEY auto_increment;

1
谢谢您的回答。然而,如果您能提供一份简要说明您的代码以及它是如何解决问题的,那将会非常有帮助。这样做可以使您的答案更具信息性和易于理解,方便未来的读者。 - Houssem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接