现在大部分的定单编号都是采用"日期+流水号"这样的格式,如:
“CGD20060203-0001”“CGD2006-06-09-0001”
“CGD2006-06-09-0002”“CGD2006-06-10-0001”
刚好我们要做一个汽车销售管理系统,里面有采购定单,销售定单需要采用这种格式,在论坛中各位兄弟的帮助下我是这样实现的:
1。创建一个表sequence记录定单时间和流水号.表结构如下:
sequence(currenttime,CGDH,XSDH)
2。编写存储过程,返回采购单号:
CREATE proc addCgOrder
@orderNum varchar(20) output
as
declare @maxtime datetime
declare @lsh varchar(10)
set @maxtime =(select top 1 currenttime from sequence )
if(datediff( day,@maxtime,getdate())>=1)//------新的一天,更新时间和单号
begin
select @maxtime
update sequence
set currenttime=getdate(),cgdh=10001,xsdh=10001
end
else//---------------一天内的单,只更新相应的流水号
begin
update sequence
set cgdh=cgdh+1
end
select top 1 @lsh=cgdh ,@maxtime=currenttime from sequence
set @orderNum='CGD'+convert(varchar(30),@maxtime,12)+'-'+right(@lsh,4)
GO
大致过程描述如下:
1。根据当前时间和sequence表中的时间判断是否是一天内的第一张单。
是则:更新sequence表中的时间为当前时间,流水号为1000001(为了转换成string截取方便整体+1000000)
不是则:相应的流水号+1
2。组织定单编号,放入输出参数中
3。对于销售定单我们也需要编写一个类似的procude
说明:我大体上就是这么实现的,希望对某些人有点帮助。本来想把他弄成一个函数 的,但是好想在mssql server函数中不能够更新表,所以没有实现。还希望大家多多指教!