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

来源:互联网 发布:linux uname 编辑:程序博客网 时间:2024/05/19 13:25

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

建表:

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 采购主表)endgo

测试:

insert into [采购主表] (ordername) values ('78465')goselect * from [采购主表]

结果:


原创粉丝点击