如何为现有SQL表的ID主键添加自增属性?
无需重建表为ID列添加自增属性的方法
问题场景
我有一个空表dbo.Posts,原本以为ID主键带有自增属性,但插入第一条记录时出现报错:
无法将值NULL插入列'ID',表'DB_9CF886_mcl959.dbo.Posts';列不允许空值。INSERT失败。
尝试执行以下SQL语句添加自增属性时:
alter table dbo.Posts ADD ID INT IDENTITY(1,1) CONSTRAINT PK_Posts1 PRIMARY KEY CLUSTERED;
又出现错误:
每个表中的列名必须唯一。表'dbo.Posts'中的列名'ID'被多次指定。
解决方案(表为空的前提下)
SQL Server不支持直接将现有普通列修改为IDENTITY(自增)列,可通过以下步骤实现:
删除现有ID列的主键约束(如果存在)
先查询主键约束名称:SELECT name FROM sys.key_constraints WHERE type = 'PK' AND parent_object_id = OBJECT_ID('dbo.Posts');替换查询到的约束名(例如
PK_Posts)执行删除:ALTER TABLE dbo.Posts DROP CONSTRAINT PK_Posts;删除原ID列
ALTER TABLE dbo.Posts DROP COLUMN ID;重新添加带自增属性的ID列并设置为主键
ALTER TABLE dbo.Posts ADD ID INT IDENTITY(1,1) CONSTRAINT PK_Posts PRIMARY KEY CLUSTERED;
操作完成后,ID列将具备自增主键属性,插入数据时无需手动指定ID值。
内容的提问来源于stack exchange,提问作者user22019322
相关产品推荐
相关产品推荐

