77.学号

84 阅读1分钟
--创建自定义函数,得到新的ID
create function f_getid(
@YXDM varchar(3),
@zydm varchar(4)
)
returns int
as
begin
	declare @re int
	
	select @re=right(id,4) from(
		select id=max(id) from tb where yxdm=@yxdm and zydm=@zydm
	) a
	set @re=isnull(@re,0)+1
return(@re)
end
go


--创建测试表
create table tb(id varchar(12)
		,YXDM varchar(3),ZYDM varchar(4))
go

--创建触发器,生成ID号
create trigger t_insert on tb
instead of insert
as
select * into #t from inserted order by yxdm,zydm
declare @yxdm varchar(3),@zydm varchar(4),@id int

update #t set @id=case when @yxdm=yxdm and @zydm=zydm then @id+1 else dbo.f_getid(yxdm,zydm) end
	,id='GY'+right(yxdm,2)+@zydm+right('0000'+cast(@id as varchar),4)
	,@yxdm=yxdm,@zydm=zydm

insert into tb
	select * from #t
go

--插入数据测试
insert into tb(YXDM,ZYDM) values('001','0001')
insert into tb(YXDM,ZYDM) values('001','0001')
insert into tb(YXDM,ZYDM) values('001','0002')
insert into tb(YXDM,ZYDM) values('001','0002')
insert into tb(YXDM,ZYDM) values('001','0001')
insert into tb(YXDM,ZYDM) values('001','0003')
insert into tb(YXDM,ZYDM) values('001','0003')
insert into tb(YXDM,ZYDM) values('002','0001')
insert into tb(YXDM,ZYDM) values('002','0001')
insert into tb(YXDM,ZYDM) values('002','0001')

--显示结果
select * from tb order by id

go
--删除测试环境
drop table tb
drop function f_getid