Váš INSERT
příkaz vždy běží v transakci – buď jste ji explicitně definovali, nebo pokud ne, pak SQL Server použije implicitní transakci.
Do tabulky vkládáte jeden (nebo více) řádek. Poté - stále uvnitř transakce - AFTER INSERT
trigger se spouští a kontroluje určité podmínky - obvykle pomocí Inserted
pseudo tabulka dostupná uvnitř spouštěče, která obsahuje řádky, které byly vloženy.
Pokud zavoláte ROLLBACK TRANSACTION
ve vašem spouštěči, pak ano – vaše transakce se vším, co dělala, je vrácena zpět a je to jako by to INSERT
nikdy se nestalo - nic se nezobrazí v tabulce databáze.
Také:FOR INSERT
je stejný jako AFTER INSERT
v SQL Server - trigger se provede po INSERT
příkaz vykonal svou práci.
Jedna věc, kterou je třeba mít na paměti (což se mnoho programátorů mýlí):spouštěč se spustí jednou za příkaz – NE jednou za řádek! Pokud tedy vložíte 20 řádků najednou, spouštěč se spustí jednou a Inserted
pseudo tabulka uvnitř spouštěče obsahuje 20 řádků. S tím je třeba počítat při psaní spouštěče – nejste vždy se zabývá pouze jedním vloženým řádkem!