2013-01-18 90 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」作爲列的默認值。