千万不要用汉语,我是因为给别人答疑解惑不得已而为之。
建表:
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 [采购主表]
结果: