2

可能重复:
如何在创建表后设置自动增量而不会丢失任何数据?

如何修改 SQL Server 2012 表的主键列(整数类型)以使其自动生成?

4

3 回答 3

2
CREATE TABLE dbo.Test(PkCol int CONSTRAINT PK_Test_PkCol PRIMARY KEY, OtherCol varchar(1));

ALTER TABLE dbo.Test
DROP CONSTRAINT PK_Test_PkCol 
GO
ALTER TABLE dbo.Test DROP COLUMN PkCol
ALTER TABLE dbo.Test
ADD PkCol int IDENTITY(1,1) CONSTRAINT PK_Test_PkCol PRIMARY KEY
GO

身份

于 2013-01-18T12:28:16.080 回答
2

您可以删除现有列并添加列类型指定为的新列IDENTITY

但要小心!

我喜欢并从这里复制了以下评论:

如果您只是删除现有列并添加一个具有相同名称但将其定义为标识的新列,您可能会修改表中某些记录的主键值。不能保证新列将获得与旧列相同的值。

由于无法将列本身修改为标识列,因此您必须创建一个带有标识列的新表,将旧表中的数据插入到新表中(使用 set identity_insert on you'll get新列中的值与旧列中的值相同),重命名或删除原始表(最好先重命名它,这样如果出现问题,您就可以回滚修改),重命名新表到原始表的名称,重新创建引用原始表的外键并运行dbcc checkident以将身份的种子初始化为下一个数字。

于 2013-01-18T12:35:22.723 回答
1

既然您说的是 SQL 2012,那么您还有另一个选择:序列。查看联机丛书,了解如何使用“下一个值”作为列的默认值。

于 2013-01-18T13:16:46.963 回答