2013-01-18 47 views

回答

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 

IDENTITY

+0

这对我的目的已经足够好了,谢谢。 – aknuds1

2

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

但要小心!

我喜欢和复制从here以下评论:

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

由于没有办法将列本身修改为标识列,所以必须创建一个具有标识列的新表,将旧表中的数据插入新表(将set identity_insert设置为on您将在新列中获得与旧列中相同的值),重命名或删除原始表(最好先重命名它,以便在出现问题时能够回滚修改),将新表重命名为原始表的名称,重新创建引用原始表的外键并运行dbcc checkident以将标识的种子初始化为下一个数字。

+0

[有一种方法可以将列本身修改为标识列。](http://stackoverflow.com/questions/6084572/how-to-set-auto-increment-after-creating-a-table-without -any数据丢失) –

1

既然你说过SQL 2012,你还有另一种选择:序列。查看Books Online关于如何使用“next value for”作为列的默认值。