业务单号自动增长的处理办法

本文介绍了如何在数据库中处理业务单号自动增长的问题,特别是在单号格式有特定要求且不能使用自增列的情况下。通过创建视图、自定义函数以及设置字段默认值,实现了在插入记录时自动生成如‘P031106001’格式的单号,其中包含了业务类型标识、日期和流水号。文中还提供了测试步骤和结果,展示了解决方案的有效性。
摘要由CSDN通过智能技术生成

问题:在实际业务处理中有些单号需要自动增长,但又不能用自增列代替
      eg:  P031106001   -- 第一位P表示采购单,031106表示日期,后三位是流水号。 

/* 1:创建测试用的表结构 */
create table tablename(pono char(10),b int)
go
/* 2:创建一个得到当前日期的视图,为下面的自字义函数作准备 */
create view vGetdate
as
  select getdate() as today
go
/* 3:用自定义函数来得到单号(因自定函数内不能用getdate()来得到当前日期,要用到上面的视图) */
create function getDH()
returns char(10)
As
begin
    declare @dh1 char(10),@dh2 char(10)
    select @dh1 = max(pono) from  tableName
    Set @dh1 = IsNull(@dh1,'P000000000') 
    select @dh2 = Left(@dh1,1) + right(convert(varchar(8),today,112),6) + '001' from vGetdate
    if @dh1 >= @dh2
    begin
        set @dh2 = left(@dh1,7) + right('000'+ cast(cast(right(@dh1,3) as int)+1 as varchar),3)
    end   
    return(@dh

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值