sql server 怎么为一个已经存在数据的table, 添加一个自增的主键列?
情况描述 如果你符合下面的情况, 可以参考本文的解决方案
- 你已经有了一个DB, 并且DB中也有了不少table, 但是table最开始的时候没有设置主键. 数据存入了一部分后, 突然想到为这个table添加主键并且自增的column. 并且不想丢失这部分数据时,,,
- 你的db是自己建的, 但是table以及table中的数据是通过其他的db export->import过来的, 此时新的db中的import进来的table可能是没有主键的, 即使import过来的列中包含id这种列,,,
网间对于这个问题存在两种答案, 一种是可以, 一种是不可以. 我只说可以的. 剩下的就是不可以.
- 首先必须删除你这个table已经存在的主键约束, 因为这样才能删除这个表已存在的主键.
- 然后新增一个主键, 这时需要将其设置成为自增的序列
[我的解释]: 因为一般的主键是id, int,long, bigint这种 type, 所以当你的db中存在id为主键约束的table, 但是其自增属性为false时, 你的table中如已存在数据是无法再修改这个自增属性的. 如下图:
configinfo表中有id为主键的主键约束, 我们看一下属性:
将 is identity 修改为 yes, identity increment 修改为 1 (true)
点击save 报错:
报错内容已经很明确. 接下来怎么解决, 就是删除 id这个column, 重新add id column时, 就设置成自增的序列.
ALTER TABLE FilePublishInfoes DROP COLUMN Id
ALTER TABLE FilePublishInfoes ADD Id BIGINT IDENTITY CONSTRAINT PK_FilePublishInfoes PRIMARY KEY CLUSTERED