angelbear的专栏

在这个浮躁的年代,脚踏实地是关键.

mssql server产生"日期+流水号"这样唯一的定单号

   现在大部分的定单编号都是采用"日期+流水号"这样的格式,如:

“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函数中不能够更新表,所以没有实现。还希望大家多多指教!

 

阅读更多
文章标签: output string 存储 go
上一篇第一次写blog
下一篇Tomcat 内幕
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭