【发布时间】:2012-11-16 06:20:47
【问题描述】:
我有一个带有“ID”列的数据库。每当数据库有新条目时,我都会从数据库中获取最后一个 ID,增加值,然后在 Insert 语句中使用它。
编辑:我需要在多个插入语句中使用 ID。我将从主表中获取此 ID,并使用此 ID 将值插入相关表中。
NextID = Select Max(ID) + 1 From Table
INSERT INTO Table1(ID, Col1, Col2...) Values(NextId, Value1, Value2...)
INSERT INTO Table2 (ID,col1,col2....) Values (NextID, Value1, Value2...)
我不知道这是否是一个好方法,因为我知道会有并发问题。 当我的应用程序尝试读取 NextID 时,有可能该应用程序的另一个实例也尝试读取相同的值,因此可能会出现并发问题。
是否有适当的方法来处理这种情况?我的意思是有一些方法可以设置数据库隔离级别。对于这种情况,这将是一个合适的隔离级别。
另外,如果有人可以建议我使用另一种方法来手动维护和增加数据库中的 ID,我也愿意接受。
如果这些信息还不够,请告诉我您需要什么。
我正在使用带有 VB 和 MS Sql Server 2008 的 ASP.Net。我不想使用 SQL Server 的内置“身份”。
【问题讨论】:
-
在一个语句中完成......
-
@MitchWheat 单条语句是什么意思?我也有同样的问题...请建议。
-
@MitchWheat 是的,这是一个选项,但我需要在多个插入语句中使用该 ID。我将从主表中读取 nextID 并使用该 ID 插入到其他相关表中。
-
我知道您不想使用
identity,但这确实是您问题的解决方案。如果您可以解释您在身份方面遇到的问题,也许有人可以就如何解决这个问题提出建议。 -
@MikaelEriksson 是的,实际上身份的问题是我的问题中的 ID 是可编辑的(不是由用户,其他一些逻辑),如果我使用身份,则无法完成。我知道,允许修改 ID 是不明智的,但我需要这个逻辑。
标签: asp.net sql-server vb.net sql-server-2008 sql-server-2008-r2