2013-12-18 62 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 –