通过SQL自动添加流水号

项目中往往有一些单据流水号或者流程流水号是希望通过新增一条记录后自动产生一个编号的,比如新增一条流程就自动根据当前日期自动添加该流程的流程流水号,下面介绍两种不同类型流水号通过SQL自动产生的方法。

     流水号格式:

          第一种(数值类型):日期+流水号,比如“201104190001”-->"201104190002"; 

          第二种(文本类型):前缀+日期+流水号,比如“WT201104190001”-->"WT201104190002"。

     不论哪种情况,流水号的生成原则都是一样的,流水号的产生都需要根据当前日期产生,新增的一条记录的流水号为当前日期下所有记录中流水号最大那条加1得来。

   一、数据库中添加一个表:TestNo

       列名       数据类型                   说明

       ID         uniqueidentifier          主键

       No         bigint                        流水号字段,不过是纯数字型的流水号,这个为本例子的第一种情况,流水号可以为纯数字

       DT         datetime                   新增一条记录的当前时间,相信每新增一条记录都会记录这次操作的当前时间的。

       CharNo   varchar(50)               流水号字段,不过是可以有字符的流水号,这个为本例子的第二种情况。

  二、SQL代码

------
--自动流水号为纯数字的情况,如 201104190005
------
declare 
@x int ,
@y char (8)
select @x= COUNT ( no ) from TestNo where CAST (DT as date )= CAST (GETDATE() as date )
if(@x=0)
begin
select @y= convert ( char (8),getdate(),112)
insert TestNo( No ,DT) values (
@y+ '0001'
,GETDATE())
end
else
   insert TestNo( No ,DT) values (
( select MAX ( No )+1 from TestNo where CAST (DT as date )= CAST (GETDATE() as date ))
,GETDATE())
select * from TestNo
  
------
--自动流水号为字符的情况,如 WT201104190005
------
declare 
@x1 int ,
@y1 char (8)
select @x1= COUNT (CharNo) from TestNo where CAST (DT as date )= CAST (GETDATE() as date )
if(@x1=0)
begin
select @y1= convert ( char (8),getdate(),112)
insert TestNo(CharNo,DT) values (
'WT' +@y1+ '0001'
,GETDATE())
end
else
begin
   insert TestNo(CharNo,DT) values (
'WT' + cast (( select MAX ( CAST ( SUBSTRING (charno,3,12) as bigint ))+1 from TestNo where CAST (DT as date )= CAST (GETDATE() as date )) as varchar (50))
,GETDATE())
end
select * from TestNo
--------------------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值