可能刚才说的不是很清楚,很多人误会了
我所说的订单号是如“JINHUO20090716001”这种形式的,下一条就是“JINHUO20090716002”
必须这种,如果是那种自增的我就不需要问了!
也可以这么问。有个字段a是某种东西的库存,整数型,每次进货,都要(a+进货数量),如果有几个人同时进货,会不会出现并发问题呢?应该怎么解决?
我问的是并发问题
我所说的订单号是如“JINHUO20090716001”这种形式的,下一条就是“JINHUO20090716002”
必须这种,如果是那种自增的我就不需要问了!
也可以这么问。有个字段a是某种东西的库存,整数型,每次进货,都要(a+进货数量),如果有几个人同时进货,会不会出现并发问题呢?应该怎么解决?
我问的是并发问题
解决方案 »
- 这样的sql语句应该如何写
- VS2008 .ASPX页面设计视图打不开
- 怎么测试一个asp.net程序资源使用情况
- 如何判断用户是否已登录
- 一个小问题的讨论,我用 dataReader 把数据记录 从 数据库提取出来后 , 要显示到客户端 ,这个时候我是用 DataList ,repeater .服务器端绑定,还是采用 数据记录+ html 混合在一起 ,而后赋给一个Div的innerHtm
- ASP.NET开发过短信平台?
- 我的javascript日期选择控件总是显示在datagride后面,怎么让它任何时候都显示在前面啊
- (200分)信息收集:你公司电脑的分辩率
- 怎样读取TEXT数据类型?
- [求助]为什么连续的英文字母在网页中不会自动换行(单行),使得网页宽度增长,而连续的汉字确可以自动换行?怎样处理这种不换行?
- 这个无限级分类存储过程怎么用的?
- 修改写代码
begin
declare @strA varchar(10)=''set @strA = a --a 可以根据你的需要去定义。set @strA = @strA + (select convert(varchar(4),isnull(max(right(dingdan,4)+1,'0001')) from table where dingdan like @strA+'%')
insert 语句end
一个单号如果同时有多个人读了,每个人加1后都想存下去,那么这时候只能有一个人存了啊。方法是在表中加一个timestamp字段,无论是谁在读取记录时都要把这个字段的值也读出去,然后在存盘的时候去判断这个字段的值是否已改变,没有变就存下去;变了就要重新去生成单号.
timestamp类型是一个时间戳,每当一条记录被新增或修改时它的值就会自动改变。一般用这个来控制并发。
set @the_time = convert(int,(select top 1 the_time from max_no_table where field = @field))
SELECT @the_max_no as max_no, @the_time as time_stamp然后对这个max_no进行加1或者其它什么处理。
存盘时:begin
IF convert(int,(select top 1 the_time from max_no where field = @field)) = @time_stamp
begin
---数据插入SQL语句
END
ELSE
---单号已被人占用时的处理
end以上是我在实际中的做法,你可以试下。