关闭

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

标签: outputstring存储go
1952人阅读 评论(1) 收藏 举报

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

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

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:60975次
    • 积分:846
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:7篇
    • 译文:0篇
    • 评论:14条
    最新评论