我在 IIS7 上使用经典的 ASP 和 SQL Server 2005。我有一个流程,一个接一个地向客户发布序列化的产品项目。当我们真的很忙时,我会看到两个用户拉同一行的情况,例如 ID5,相隔一两秒。
似乎用户 2 选择了用户 1 之前一两秒选择的同一行,然后用户 2 也被分配了记录 ID5,在我的更新可以将其专门分配给用户 1 之前,因此,强制用户 2 采取下一个记录。
我可能有 10 件商品MyTable
,4 件已售出,6 件有货。所以下一条可用的记录是 ID5
基本上,我的选择代码是两部分:
第1部分:
Select top 1 *
from MyTable
where ProdNumber = 'ProdNum' and Sold = 0 order by id
那么,如果存在:
第2部分:
update MyTable
set Sold = 1
where id = 'record selected above'
用户 1 将抓取记录 ID5,然后在 PART2 执行之前,用户 2 抓取相同的记录 ID5。结果是用户 1 的第 2 部分被用户 2 直接覆盖为记录 ID5 上的买方。
我已经阅读并阅读了这个论坛和其他关于锁定的内容,但没有看到任何似乎直接适用于我的情况和代码方法的内容。有没有人对我有什么建议。除了退出 SQL Server 和 Classic ASP 之外?提前致谢。