2013-07-03 16 views
4

我想確保每個插入表的ID列增加。如何在INSERT中獲取下一個ID?

我想這樣的說法:

INSERT INTO Anlagenteil (ID, TaId, Subtype, Name) 
VALUES     (MAX(ID)+1, 0, 'BdAnlageteil', 'Barcodeleser0'); 

不幸的是我收到此錯誤信息:

Msg 207, Level 16, State 1, Line 1 
Invalid column name 'ID'. 
+3

如果您需要遞增值,通常使用內置功能會更好(在SQL Server中,這可能是['IDENTITY']](http://msdn.microsoft.com/zh-cn/library/ms186775 .aspx)列)。考慮如果兩個用戶同時運行相同的代碼,您的方法會發生什麼情況。 –

回答

8

使用嵌套查詢是這樣的:

INSERT INTO Anlagenteil (ID, TaId, Subtype, Name) 
VALUES ((SELECT ISNULL(MAX(ID) + 1, 1) FROM Anlagenteil), 0, 'BdAnlageteil', 'Barcodeleser0'); 
1

無效的列名稱ID 」。

這表明你根本沒有ID列。

您應該將此列添加到表中,並將其設置爲自動遞增,而不是自己編寫邏輯來執行此操作。

由於@Damien_The_Unbeliever指出,如果2人同時運行腳本,這可能會導致問題。

ALTER TABLE Anlagenteil 
ADD ID INT IDENTITY(1,1) 

然後你的SQL語句可以只是:

INSERT INTO Anlagenteil (TaId, Subtype, Name) 
VALUES     (0, 'BdAnlageteil', 'Barcodeleser0') 

,並會自動添加新的ID值。

+1

ID絕對是一個有效的列名稱。 – BetaRide