SQL Server 用触发器生成格式化单号的例子

千万不要用汉语,我是因为给别人答疑解惑不得已而为之。

建表:

create table [采购主表]([记录顺序] int identity(1,1),[采购单号] nvarchar(50),ordername nvarchar(50))

触发器:

create TRIGGER CK_Insert  
  ON 采购主表  
  After INSERT  
AS  
BEGIN  

 declare @oid2 nvarchar(50)
 declare @oid nvarchar(50)
 declare @month nvarchar(2)
 declare @year nvarchar(2)
 declare @ym nvarchar(4)
 set @month=month(getdate())
 if len(@month)=1
 set @month='0'+@month --使月份为两位长
 set @year=right(convert(nvarchar,year(getdate())),2)
 set @ym=@year+@month --组成年月字符串
 
--编号格式为CK1207-0001
 if exists(select top 1 1 from 采购主表 where 记录顺序<(select [记录顺序] from inserted))
 begin	
    select top 1 @oid2=采购单号 from 采购主表 where 记录顺序<(select [记录顺序] from inserted)
    order by 记录顺序 desc 
  --获取最后一条的单据编号,用自动编字段倒排序
 end
 else  
 begin	
    set @oid2=N'CK'+@ym+N'-'+N'0000' --没有记录是默认为今天
 end
 
--订单不是本月的,重新开始一个新的订单流水号
 if convert(nvarchar,left(@oid2,6))<>@ym
 begin
 --用本月的年月号开始
  set @oid2='CK'+@ym+'-'+'0000'
 end
 
declare @str nvarchar(50) --生成临时单号
 
set @str=convert(nvarchar,(convert(int,right(@oid2,4))+1)) --订单号加一
 while (4-len(@str)>0)
 begin
    set @str='0'+@str   
 end
 set @oid2='CK'+@ym+'-'+@str
 --print @oid2
 
--如果该订单好已经存在,则重新获取新的订单号
 while exists(select * from 采购主表 where 采购单号=@oid2)
 begin
    
  set @str=convert(nvarchar,(convert(int,right(@oid2,4))+1)) --订单号加一
  while (4-len(@str)>0)
  begin
    set @str='0'+@str   
  end
  set @oid2='CK'+@ym+'-'+@str
  --print @oid2
 end
 
    set @oid=convert(nvarchar,@oid2)
    update 采购主表 set 采购单号=@oid 
    where 记录顺序=(select max(记录顺序) from 采购主表)
end
go



测试:

insert into [采购主表] (ordername) values ('78465')
go


select * from [采购主表]

结果:


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值