注册 登录
编程论坛 VFP论坛

请教vfp+sql多用户并发,如何生成不重复订单号!规则是年月日+四位递增数字

yafengliang 发布于 2017-07-26 08:56, 2040 次点击
如题所说
5 回复
#2
mywisdom882017-07-26 12:46
1、'20170725' + '0001'
2、最大是9999,也就是9999张单据
网上讨论过,在同1条语句中查询与插入,是不会出现重复。
如,SQL2000中,下面语法是可以的
insert into 表a(字段1,字段2,字段3,单号)
select @字段1,@字段2,@字段3,单号=(select max(单号)+1 from 表a)
这个列子的单号只是,简单的 int,如果这个不重复了,那你的也就可以按这个思路,去实现
#3
mywisdom882017-07-26 17:36
--drop table #tb1
--create table #tb1(单号 varchar(12),日期 datetime)

declare @单号 varchar(12),@日期 datetime
set @日期=getdate()

insert into #tb1(单号,日期)
select convert(varchar(8),getdate(),112)+right('0000'+rtrim((substring(isnull(max(单号),'000000000000'),9,4)+1)),4),
@日期 from #tb1 where convert(varchar(8),日期,112)=convert(varchar(8),@日期,112)

select * from #tb1
只有本站会员才能查看附件,请 登录
#4
yafengliang2017-07-27 16:36
回复 3楼 mywisdom88
谢谢!这个是不重复了,我现在是建一个表保存最大单号,一产生单号马上回写进这个表,其他用户创建订单时,先去找当天的最大单号。但有一个情况,如果一个用户没有保存就退出,这时将出现断号;如果锁表(或者产生单号代码放在‘保存’按钮的话),其他用户就要等待。因为一个用户在操作时需要一定的时间。

[此贴子已经被作者于2017-7-27 16:41编辑过]

#5
mywisdom882017-07-27 17:27
提前分配单号的,会出现你这个情况。
3楼的方法是不提前分配单号,只有在写数据的时候,才分配单号,写成功时,返回单号给当前操作界面
好处是:号码一般是连续,不重复,
坏处是:当前操作界面在新增记录时,看不到单号,要等到保存成功时,才能看到单号是什么

[此贴子已经被作者于2017-7-27 17:31编辑过]

#6
ccidnet2019-02-21 22:41
回复 楼主 yafengliang
1