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 condición 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
ID TEXTO ----------- --------- 1 A 2 B 3 C (3 row(s) affected)