Ihr INSERT
-Anweisung wird immer in einer Transaktion ausgeführt - entweder haben Sie explizit eine definiert, oder wenn nicht, verwendet SQL Server eine implizite Transaktion.
Sie fügen eine (oder mehrere) Zeile in Ihre Tabelle ein. Dann - noch innerhalb der Transaktion - das AFTER INSERT
Trigger wird ausgeführt und überprüft bestimmte Bedingungen - normalerweise mit dem Inserted
innerhalb des Triggers verfügbare Pseudo-Tabelle, die die eingefügten Zeilen enthält.
Wenn Sie ROLLBACK TRANSACTION
aufrufen in Ihrem Trigger, dann ja - Ihre Transaktion wird mit allem, was sie getan hat, zurückgerollt und es ist, als ob INSERT
ist nie passiert - in Ihrer Datenbanktabelle wird nichts angezeigt.
Auch:FOR INSERT
ist dasselbe wie AFTER INSERT
in SQL Server - der Trigger wird nach ausgeführt das INSERT
-Anweisung hat ihre Aufgabe erfüllt.
Eine Sache, die man im Hinterkopf behalten sollte (was viele Programmierer falsch machen):Der Trigger wird einmal pro Anweisung ausgelöst - NICHT einmal pro Reihe! Wenn Sie also 20 Zeilen auf einmal einfügen, wird der Trigger einmal ausgelöst und der Inserted
Pseudo-Tabelle innerhalb des Triggers enthält 20 Zeilen. Das müssen Sie beim Schreiben des Triggers berücksichtigen - das sind Sie nicht es wird immer nur eine einzige Zeile eingefügt!