如何构建此交易?

roy*_*ppa 1 c# sql-server asp.net transactions isolation-level

我们有一个基于ASP.NET/MSSQL的Web应用程序,它可以生成带有连续订单号的订单.

当用户保存表单时,将按如下方式创建新订单:

  1. SELECT MAX(order_number)FROM order_table,调用此max_order_number
  2. 设置new_order_number = max_order_number + 1
  3. 使用此new_order_number(它只是订单记录中的字段,而不是数据库密钥)插入新订单记录

如果我在单笔交易中附上上述3个步骤,如果两个客户同时保存新订单,是否会避免创建重复的订单号?(并且假设系统最终位于具有多个IIS服务器和一个MSSQL服务器的Web场中).

由于系统中某处的并发性,我想避免两个客户选择相同的MAX(order_number).

应该使用什么隔离级别?谢谢.

Mar*_*cus 5

为什么不使用Identity作为订单号?

编辑:
据我所知,你可以使当前的order_number列成为一个标识(你可能需要重置种子,这已经有一段时间了,因为我已经这样做了).你可能想做一些测试.
以下是关于在SSMS中将列更改为标识时实际发生的情况的详细说明.作者提到如果表已有数百万行,这可能需要一段时间.