多个用户竞争“下一个”订单

问题描述

我有一个调用sql Server 2016存储过程的应用程序。该过程的事务包括从优先顺序列表中获取一个订单,然后该事务在ERP中进行其他插入和更新。

我遇到的问题是,当我有多个应用程序在寻找下一个订单时。对于他们来说,查询存储过程中的下一个顺序并获得相同的顺序并不难。

即使插入/更新将按预期锁定,但获取一个订单的选择也不会锁定...因此,获取一个订单的情况容易重复。

解决这个问题的最干净的方法是什么?如果可能的话,我不希望在事务中对选择应用任何自定义锁定。我还研究过引入一个表来存储正在“工作”的顺序,以防止对该顺序进行任何其他读取。令我惊讶的是我从未遇到过,所以希望有人对此有一个最佳的最佳实践。

解决方法

解决方案采用以下形式:

查询以获取下一个订单

  • 开始翻译
  • 使用此条件为此订单更新数据库
  • 如果没有受影响的记录引发错误,并告诉用户重试
  • 否则,该订单将继续进行其他反式插入和更新
  • 结束翻译