2013-12-18 61 views
-2

我有一个现有的数据库,有一个表Categories,其中我有一列id列上的主键。我的数据库中有很多行,所以我不想从头开始。在SQL Server 2012中自动递增

当我创造它做AUTO_INCREMENT在Categories,所以现在我尝试更新,但我得到一个错误我忘了:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'MODIFY'.

这是我的代码

ALTER TABLE Categories MODIFY id INT AUTO_INCREMENT; 

不任何人都知道我做错了什么?

+3

auto_increment是mysql吗?它是sql服务器的标识。 –

回答

0
ALTER TABLE categories 
    ADD ID INT IDENTITY 

,然后你可以把它作为主键

ALTER TABLE categories 
    ADD CONSTRAINT PK_categories 
    PRIMARY KEY(ID) 
+0

我得到每个表中的列名必须是唯一的。表'Categories'中的列名'ID'被多次指定。 – johns

+0

我已经定义了它,所以我不能那样做 – johns

+1

您无法将标识添加到现有列。最好你可以做的是创建一个新的身份列(ID2),然后从ID列中复制数据... drop ID列,然后将ID2重命名为ID。或者你可以按照这个链接http://www.mssqltips.com/sqlservertip/1397/add-or-drop-identity-property-for-an-existing-sql-server-column/ –

2

首先创建一个名为ID2

一个新的身份列
ALTER TABLE CATEGORIES 
ADD COLUMN ID2 INT IDENTITY(1,1) NOT NULL; 

然后用值从ID来填充它

SET IDENTITY_INSERT CATEGORIES ON; -- thanks Mathese 

UPDATE C 
SET ID2 = ID 
FROM CATEGORIES C 
ORDER BY ID ASC; 

SET IDENTITY_INSERT CATEGORIES OFF; 

一旦您的ID值安全迁移到新的ID2列,放弃ID。

ALTER TABLE CATEGORIES 
DROP COLUMN ID; 
GO -- I think you may have to do GO here. 

然后,将ID2重命名为ID。

EXEC SP_RENAME @OBJNAME = 'CATEGORIES.ID2', @NEWNAME = 'ID', @OBJTYPE = 'COLUMN'; 
+0

当您执行更新时,您将收到错误,因为您无法更新标识列,除非在类别上指定了set identity_insert –