Acceder Registrarme

Trigger o disparador para auto generar códigos en SqlServer


Por: Kevin Arnold Arias Figueroa Publicado el: 2017-06-30 03:03:49
create trigger trggBeforeCategoria
on tcategoria
instead of insert
as begin
declare @anio char(4), @mes char(2), @dia char(2), @ultimoCodigo char(15), @parteFecha char(8), @parteNumerica int, @longitudNumero int, @codigoNumerico char(7), @codigo char(15)
set @anio=(select YEAR(getdate()));
set @mes=(select MONTH(getdate()));
set @dia=(select DAY(getdate()));
if len(@mes)=1 begin
	set @mes=concat('0', @mes);
end;
if len(@dia)=1 begin
	set @dia=concat('0', @dia);
end;
set @ultimoCodigo=(select max(codigoCategoria) from tcategoria);
if @ultimoCodigo is null begin
	set @ultimoCodigo=(select concat(@anio, @mes, @dia, '0000000'));
end;
set @parteFecha=substring(@ultimoCodigo, 1, 8);
set @parteNumerica=substring(@ultimoCodigo, 9, 7);
if @parteFecha=concat(@anio,@mes,@dia) begin
	set @parteNumerica=@parteNumerica+1;
end
else
	set @parteNumerica=1;
end;
set @longitudNumero=(select len(@parteNumerica));
set @codigoNumerico=concat(replicate('0', 7-@longitudNumero), @parteNumerica);
set @codigo=concat(@anio, @mes, @dia, @codigoNumerico);
SET NOCOUNT ON;
select * into #tmp from inserted;
UPDATE #tmp SET codigoCategoria = (select @codigo);
insert into tcategoria select * from #tmp;
drop table #tmp;