sql >> Database >  >> RDS >> Sqlserver

SQL Server - Na invoegen/voor invoegen - terugdraaien

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!



  1. Hoe records te verwijderen NIET IN

  2. Symfony2 doctrine mysql IN query

  3. Controleren op een leeg resultaat (PHP, PDO en MySQL)

  4. Postgres log spam dempen in rails 3 logs