asp.net - 数据库隔离模型

标签 asp.net sql-server vb.net sql-server-2008 sql-server-2008-r2

我有一个带有“ID”列的数据库。每当数据库有新条目时,我都会从数据库中获取最后一个 ID,递增该值,然后在 Insert 语句中使用它。

编辑:我需要在多个 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,我也对此持开放态度。

如果这些信息还不够,请告诉我您需要什么。

我正在使用 ASP.Net、VB 和 MS Sql Server 2008。我不想使用 SQL Server 的内置“身份”。

最佳答案

获取下一个 ID 的唯一方法是实际插入行并使用标识。其他一切都会失败。因此,您必须首先插入到父表中:

begin transaction;
insert into Table (col1, col2, col3) values (value1, value2, value3);
set @Id = scope_identity();
insert into Table1(ID, col1, col2) values (@Id, ...);
insert into Table3(ID, col1, col2) values (@Id, ...);
commit;

这是原子和并发安全的。

I do not want to use the built-in "Identity" of SQL Server.

tl;博士。除非您能明确说明原因,否则您“想要”的东西并不重要。为什么。你可以正确地做到这一点,或者你可以花时间“忘记重新发明轮子”。

关于asp.net - 数据库隔离模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13411474/

相关文章:

c# - 如何在 Asp.net MVC 6 中使用 NHaml(找不到模板错误)

Jquery 表单验证/Asp MVC 模型绑定(bind) - 名称中包含句点

java.sql.SQLException : Column not found

c# - 为什么我不能使用这段代码更新我的 SQL Server 表?

c# - 何时使用 ExecuteScalar、ExecuteReader 和 ExecuteNonQuery?

c# - ASP.NET MVC 基于用户角色显示 HTML

sql - 更新三个不同服务器上的存储过程

asp.net - 用户在ASP.NET应用程序中使用Entity Framework 4和VB.NET更新记录时设置值

vb.net - 对于 Always On Top 选项,Visual Basic 代码是什么?

javascript - 如何在 setTimeout() 函数中使用 $(this) 访问 asp 控件