sql server 自动增长

问题:在实际业务处理中有些单号需要自动增长,但又不能用自增列代替,可能格式不相同。


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(@dh2)
end
go


/* 4:在字段默认值中填入 dbo.getdh() */
alter table tablename add constraint df_tablename_1 default(dbo.getdh()) for pono


-/* 5:测试:*/
insert tablename(b) values(1)
insert tablename(b) values(2)
select * from tablename


-- 测试结果
pono       b           
---------- ----------- 
p031115001 1
p031115002 2


总结:此方法运用到了一些小技巧
1:用字段默认值来实现单号自增
2:用自定义函数来得到字段的默认值
3:因在自定义函数中不能用getdate()之类非确定的函数,用视图来得到当前日期


sql server left()函数:
取一个字符串的前若干位
select left('abcdefg', 3)
输出: abc
也可以用select left(FIELD, 3) from TABLE
输出这个表中所有数据FIELD列的前三个字符


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值