描述:每种单据新建时,自动生成它的单据编号。
规则如:固定码+日期+流水号 (ABC1603180001)
方法一:触发器
触发器的缺点是,执行了sql之后才看到编码。
测试:流水号不能超过最大数,否则后面的号码全是0
--有两张表,客户表和项目表,要求:新建项目时自动生成项目编号,每个不同的客户的项目的编号从1开始
--项目编号格式为PJ+"-"+"客户编号"+"-"+"日期"+"-"+"流水号"
create table TestAccount --创建测试客户表
(
ClientNum nvarchar(32), --客户编号
ClientName varchar(100) --客户姓名
)
create table TestProject --创建测试项目表
(
ProID int primary key identity(1,1),
ProNum nvarchar(32), --项目编号
ProName nvarchar(100), --项目名称
ClientNum nvarchar(100), --客户编号
)
create trigger T_AutoNumber
on TestProject after insert
as
begin
declare @one nvarchar(8), --PJ
@two nvarchar(32), --客户编号
@three nvarchar(8), --日期
@four int, --流水号
@id int --ID
set @one='PJ'
set @three=CONVERT(varchar(8),GETDATE(),112)
--从inserted副本表里获取当前数据插入
select @two=ClientNum,@id=ProID from inserted
--获取编号最后4位
select @four=MAX(CAST(right(ProNum,4) as int)) from TestProject where ClientNum=@two
--对每个新客户的流水号都是从1开始,已存在客户为最大流水号加1
if @four is null
set @four=0
else
set @four=CAST(@four as int)
set @four=@four+1
update TestProject set ProNum=@one+'-'+@two+'-'+@three+'-'+RIGHT('0000'+CAST(@four as varchar),4) where ProID=@id
end
go
--生成测试表数据
insert into TestAccount values('小小鸭','XXY')
insert into TestAccount va