asp.net 多用户流水号问题
数据库储存了员工编号ZF-0358,让操作员1新建员工档案前获取为ZF-0359,而操作员2新建员工档案获取员工编号为ZF-0360。
但目前如果操作员1、2同时新建员工档案时,他们获取的新编号均为ZF-0359。如何操作避免多用户并发申请新员工编号时出现重复编号以及跳号问题?
------解决方案--------------------首先,编程方式不可能防止跳号!编程是较低级的工作,更关键地是你的业务逻辑处理。比如说1、2、3都创建了流水号,然后2和3都确定保存了,而1放弃了,那么此时显然会跳号的。
而分配流水号其实很简单。假设你有专门的一个“最后流水号”表,这个表里只有一条记录,就上保存最后使用过的流水号,那么你可以写
update [最后流水号] set [编号]=[编号]+1
select [编号] from [最后流水号]
执行它时,要在一个事务中执行(假设使用sql server,参考msdn文档)。由于sql server的事务处理级别的规定, 这就不可能并发。
------解决方案--------------------其实两个问题可以归为一个问题,解决办法如下:
1 员工编号生成的时机应该是在保存新记录的时候,这样就不会导致员工编号脱离数据库存在的情况
2 查询当前最大员工编号,生成新的编号等一系列 SQL 语句应该在同一个事务中执行。
请试一下吧
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。