Din INSERT
uttalande körs alltid i en transaktion - antingen har du uttryckligen definierat en, eller om inte, så kommer SQL Server att använda en implicit transaktion.
Du infogar en (eller flera) rader i tabellen. Sedan - fortfarande inne i transaktionen - AFTER INSERT
trigger körs och kontrollerar vissa villkor - vanligtvis med Inserted
pseudotabell tillgänglig inuti utlösaren, som innehåller raderna som har infogats.
Om du anropar ROLLBACK TRANSACTION
i din trigger, då ja - din transaktion, med allt den har gjort, återställs och det är som om den där INSERT
hände aldrig - ingenting dyker upp i din databastabell.
Även:FOR INSERT
är samma som AFTER INSERT
i SQL Server - triggern exekveras efter INSERT
statement har gjort sitt jobb.
En sak att tänka på (vilket många programmerare har fel):utlösaren aktiveras en gång per uttalande - INTE en gång per rad! Så om du infogar 20 rader på en gång aktiveras utlösaren en gång och Inserted
pseudotabellen inne i utlösaren innehåller 20 rader. Du måste ta hänsyn till det när du skriver utlösaren - du är inte har alltid att göra med bara en enda rad som infogas!