代码改变世界

一种简单产生流水号的方法

2008-07-22 00:38  蓝之风  阅读(3033)  评论(2编辑  收藏  举报

最近做项目在做到工单处理的时候,工单的流水号需要自动产生,找了好多方法,都有点麻烦,并且并发性都难以控制,工单号的格式要求是:单的标识+年月日+当日流水号(如:No.20080808001,No.20080808002),前面的都好处理,关键就是处理当日流水号的问题,用户一点创建单马上就要出现单号,所以自己想了种比较简单的方法来实现每天流水号的产生,产生流水号的方法很简单,但是也没有很好的并发性处理,创建时使用的单号很可能已经别别人抢先使用了,所以我在保存单的时候再做一次检查,如果单号已经别使用那么就重新生成一个单号,保存完成后将这个单号返回给用户,这样就基本几解决了工单号的产生问题了

表格如下:

表名(Bill)

字段名称 字段意义
Id 标识
No 流水号
Title 工单标题
CreateTime 建单时间

 

为了简单又能说明问题,就这么多字段,那么我要每次增加一张单的时候怎么让No按照当天的流水号自动加1呢?

可以在SQL里自定义一个函数,然后再插入数据的时候来调用这个函数就可以了

/*
**************************************
功能:产生当天工单的流水号
参数:@pfx 前缀表示,如:A ,AA, BA
结果:返回如:A080721001,A080721002

  作者:Vaiyanzi  (Email:vaiyanzi@gmail.com)
**************************************
*/
CREATE FUNCTION  dbo.fun_getNo (@pfx nvarchar(10))  
RETURNS nvarchar(20)  AS  
BEGIN 
    
DECLARE @No nvarchar(20)
    
Set @No=@pfx --
    DECLARE @tNo int
    
SELECT @tNo = RIGHT(ISNULL(MAX(No),0), 3+ 1001 FROM Bill WHERE  (CONVERT(varchar(10), CreateTime, 120= CONVERT(varchar(10),GetDate(),120))
    
SET @No = @No + CONVERT(varchar(10), GetDate(),12+ RIGHT(@tNo3)
    
RETURN @No
END

 

 这样就可以在插入数据的时候调用这个函数来产生当日的工单流水号了