Ejemplo:
--TABLAS:
create table Empleado(
id int not null,
nombre varchar(20),
apellido varchar(20),
edad int,
editable varchar(2)
)
--tabla log
create table Empleado_Log(
idEmpleado int,
nombre varchar(20),
apellido varchar(20),
edad int,
editable varchar(2),
accion varchar(20)
)
--trigger que se disparará cuando se haga un insert o un update
create trigger trg_Example
on Empleado
after insert,update
as
begin
declare
@idEmp int,
@nombre varchar(20),
@apellido varchar(20),
@edad int,
@editable varchar(2),
@accion varchar (20)
select @idEmp=id,@nombre=nombre,@apellido=apellido,@edad=edad,
@editable=editable
from inserted
begin
--Si hay valores en la tabla deleted y además todos(excepto
--editable y id) son diferentes a los nuevos valores insertados,
--significa que ha habido un update
if exists(select * from deleted d join inserted i on
d.id=i.id where d.nombre != i.nombre or
d.apellido != i.apellido or d.edad != i.edad)
begin
set @accion ='record updated'
insert into Empleado_Log values(@idEmp,@nombre,@apellido,
@edad,@editable,@accion)
end
--Si no ha habido un update hay valores sólo en la tabla inserted
--y eso significa que ha habido un insert.No se debe olvidar
--que un update es un delete y un insert.
else if exists(select id from inserted)
and not exists(select id from deleted)
begin
set @accion ='record inserted'
insert into Empleado_Log values(@idEmp,@nombre,@apellido,
@edad,@editable,@accion)
end
end
end
--probando
insert into Empleado values (1,'pedro','sanchez',30,'si')
insert into Empleado values (2,'Luis','Perez',32,'no')
update Empleado set nombre='josse',apellido='diaz',
edad=21,editable='si' where id=1
update Empleado set nombre='Juan' where id=2
delete from Empleado_Log
select * from Empleado_Log
--borrando tablas y trigger
drop table Empleado_Log
drop table Empleado
drop trigger trg_Example
