Bases de datos

SQL Server

Ejemplo de disparador/trigger INSTEAD OF INSERT

En ocasiones es necesario hacer que en un INSERT de una tabla se hagan verificaciones/modificaciones antes/después de realizar la acción... O evitar el INSERT según las circunstancias...

Este ejemplo es un disparador/trigger INSTEAD OF INSERT que toma en cuenta estos detalles:

if exists (select * from sys.objects where name = 'zzz_example') drop table zzz_example;
create table zzz_example (ID int identity (1, 1) not null, TEXTO varchar(100), primary key (ID));
go
 
create trigger tr_zzz_example_instead_insert on zzz_example instead of insert as
begin
	insert into zzz_example (TEXTO)
		select a.TEXTO
		from inserted a
			left outer join zzz_example b on b.TEXTO = a.TEXTO
		where not a.TEXTO = 'NO INSERTAR' and b.ID is null;
end;
go
 
insert into zzz_example (TEXTO) values ('A');
insert into zzz_example (TEXTO) values ('A'); -- No se inserta por estar repetido
insert into zzz_example (TEXTO) values ('NO INSERTAR'); -- No se inserta por condicin sobre "NO INSERTAR"
insert into zzz_example (TEXTO) values ('A'), ('B'), ('NO INSERTAR'), ('C'); 
 
select * from zzz_example;
go
 
if exists (select * from sys.objects where name = 'zzz_example') drop table zzz_example;
go
 
 

Resultado

ID          TEXTO
----------- ---------
1           A
2           B
3           C

(3 row(s) affected)