Uw INSERT
instructie wordt altijd uitgevoerd in een transactie - of u hebt er expliciet een gedefinieerd, of als dat niet het geval is, gebruikt SQL Server een impliciete transactie.
U voegt één (of meerdere) rijen in uw tabel in. Dan - nog steeds binnen de transactie - de AFTER INSERT
trigger wordt uitgevoerd en controleert bepaalde voorwaarden - meestal met behulp van de Inserted
pseudo-tabel beschikbaar in de trigger, die de rijen bevat die zijn ingevoegd.
Als u ROLLBACK TRANSACTION
. aanroept in uw trigger, dan ja - uw transactie, met alles wat het heeft gedaan, wordt teruggedraaid en het is alsof die INSERT
nooit gebeurd - er verschijnt niets in uw databasetabel.
Ook:FOR INSERT
is hetzelfde als AFTER INSERT
in SQL Server - de trigger wordt uitgevoerd na de INSERT
verklaring heeft zijn werk gedaan.
Eén ding om in gedachten te houden (wat veel programmeurs fout hebben):de trigger wordt eenmaal per statement geactiveerd - NIET één keer per rij! Dus als u 20 rijen tegelijk invoegt, wordt de trigger eenmaal geactiveerd en de Inserted
pseudo-tabel in de trigger bevat 20 rijen. Je moet daar rekening mee houden bij het schrijven van de trigger - je bent niet altijd bezig met slechts een enkele rij die wordt ingevoegd!