La sua dichiarazione INSERT
viene sempre eseguito in una transazione - o hai esplicitamente definito uno, o se non , quindi SQL Server utilizzerà una transazione implicita.
Stai inserendo una (o più) file nel tuo tavolo. Quindi, sempre all'interno della transazione, viene eseguito il trigger AFTER INSERT
e vengono verificate determinate condizioni, in genere utilizzando la pseudo-tabella Inserted
disponibile all'interno del trigger, che contiene le righe che sono state inserite.
Se si chiama ROLLBACK TRANSACTION
nel vostro grilletto, allora sì - la transazione, con tutto quello che sta facendo, è rollback ed è come se questo non è mai successo INSERT
- nulla appare nella vostra tabella di database.
anche: FOR INSERT
è lo stesso AFTER INSERT
in SQL Server - il grilletto viene eseguito dopo la dichiarazione INSERT
ha fatto il suo lavoro.
Una cosa da tenere a mente (che un sacco di programmatori ottenere sbagliato): il grilletto viene sparato una volta per partita - NON volta per ogni riga! Quindi se inserisci 20 righe contemporaneamente, il trigger viene attivato una volta e la pseudo-tabella Inserted
all'interno del trigger contiene 20 righe. È necessario tenerne conto quando si scrive il trigger: si è non che si occupa sempre solo di una singola riga inserita!
fonte
2012-11-14 06:25:00
@MitchWheat: una transazione esisterà sempre - no? O esplicito o implicito. E il rollback terminerebbe quella transazione e annullerebbe tutto ciò che questa transazione stava tentando di fare al tavolo. –
Sì, mi dispiace Marc, è corretto. Intendevo una transazione esplicita. Penso che possa aver intorbidato l'acqua ... eliminerò il commento precedente. –
Dove prendi quei valori '@ InstructorNo' e' @ AreaName' da ?? Fondamentalmente, se chiami 'ROLLBACK TRANSACTION' nel tuo trigger, ti fermerai ** e interromperà ** il tuo' INSERT' e nessuna riga verrà inserita in tutto –