日期:2014-05-17  浏览次数:20448 次

在sqlserver2008中如何根据年份和单位机构码自动生成序列号?
RT,假如有一个表basic,只有s_no,name,u_no三个字段
s_no为想要自动生成的序列号,u_no为填报时输入的单位机构码,比如A单位是10,B单位是11,依此类推……

现在,想根据年份和机构码u_no的不同生成序列号:
比如A单位是10且现在是13年,则生成500116-10-2013-00001,再增加一条则是500116-10-2013-00002……
如果现在是14年,第一条记录要是500116-10-2014-00001……类推

RT:现在在写触发器的时候只会把机构码的条件写进去,也就是说,生成的序列号无法在年度内进行递增,而是随便哪一年都会一直递增下去……

请问这个触发器要怎么改才能让序列号只随着机构码的不同在同一年递增,谢谢

create trigger s_no
on basic
after insert 
as 
begin 
declare @one nvarchar(6), --编号第一部分,500116 
@two nvarchar(2), --编号第二部分,医院编号 
@three nvarchar(8), --编号第三部分,日期 
@four int, --编号第四部分,流水号 
set @one='500116' 
set @three= convert( varchar(8),GETDATE(),112) 
--从Inserted副本表里获取当前插入数据的医院编码
select @two=u_no from Inserted 
--获取编号最后四位 
select @four=max(cast(right(s_no,4)as int)) 
from basic 
where u_no=@two 
--对每一个单位的流水号都是从1开始,已存在单位为最大流水号加1 
if @four is null 
set @four=0 
else 
set @four=cast(@four as int) 
set @four=@four+1 
update basic set s_no=@one+'-'+@two+'-'+@three+'-'+right('0000'+cast(@four as varchar),4) where u_no=@two and  s_no is null
end 
go
触发器 自编号 sqlserver

------解决方案--------------------
获取年份   根据年份判断 一下
------解决方案--------------------
建议把序列号分成2段,或者3段保存,500116-10一段,年份一段,最后一个1段。