SQL Server:合理的“自动增量”技术?

时间:2010-01-12 20:50:25

标签: sql sql-server tsql transactions

我第一次使用SQL Server 2005,过去主要使用MySQL。我习惯使用auto_increment在表格中创建唯一的ID。

无论如何......我在java应用程序中工作,需要执行以下操作。假设我的表有两列:itemID(int)和itemValue(int)。

这基本上就是我想要做的事情(dbconn方法只是伪代码):

dbconn.execSQL("begin tran");
int nextID = dbconn.execSQLSelect("select max(itemID)+1 from itemTable");
dbconn.execSQLInsert("insert into itemTable values " + nextID + ", 1000");
dbconn.execSQL("commit tran");

begin / commit tran语句是否会处理第2行和第3行之间可能的竞争条件?或者,我需要做一些TSQL相当于MySQL的“锁定表”吗?

2 个答案:

答案 0 :(得分:7)

只需创建列itemID IDENTITY ON并让MS SQL引擎处理它。自己处理身份增量是非常不稳定的。

答案 1 :(得分:2)

您应该制作IDENTITY列。