Din INSERT
sætning kører altid i en transaktion - enten har du eksplicit defineret en, eller hvis ikke, så vil SQL Server bruge en implicit transaktion.
Du indsætter en (eller flere) række i din tabel. Derefter - stadig inde i transaktionen - AFTER INSERT
trigger kører og kontrollerer visse forhold - typisk ved hjælp af Inserted
pseudo-tabel tilgængelig i triggeren, som indeholder de rækker, der er blevet indsat.
Hvis du kalder ROLLBACK TRANSACTION
i din trigger, så ja - din transaktion, med alt det, den har foretaget, er rullet tilbage og det er som om den INSERT
aldrig sket - intet dukker op i din databasetabel.
Også:FOR INSERT
er det samme som AFTER INSERT
i SQL Server - triggeren udføres efter INSERT
statement har gjort sit arbejde.
En ting at huske på (som mange programmører tager fejl):udløseren udløses én gang pr. erklæring - IKKE en gang pr række! Så hvis du indsætter 20 rækker på én gang, udløses udløseren én gang og Inserted
pseudo-tabel inde i triggeren indeholder 20 rækker. Det skal du tage højde for, når du skriver triggeren - det er du ikke beskæftiger sig altid med, at der kun er indsat en enkelt række!