MSSQL: Cosa succede quando si verifica un errore durante l'esecuzione del trigger?
-
22-08-2019 - |
Domanda
Per quanto riguarda l'aggiornamento e l'inserimento di trigger per MS SQL Server, c'è un modo per renderli atomici? In altre parole, se si verifica un errore durante il trigger, è possibile ripristinare automaticamente l'inserto o l'aggiornamento originali?
Soluzione
Dopo che i trigger fanno automaticamente parte dell'istruzione DML Atomic Insert/Aggiorna/Elimina su una tabella.
Basta emettere Rollback Tran nel grilletto per il rollback tutto funzionante nel grilletto e nell'istruzione I/U/D originale. Il trans più esterno è anche tornato indietro se ce n'è uno.
Importante
Il rollback in un grilletto per SQL 2000 e precedente aborta il lotto. Nessun codice dopo l'esecuzione dell'I/u/d offensiva. Vedi Erland Ottimo articolo e altro
Per SQL 2005 con Try/Catch, l'esecuzione andrà al blocco Catch e il tuo lotto (aka immagazzinato proc ecc) uscirà normalmente.
Vedere Rollbacks e impegna in procedure e trigger memorizzati. Il grilletto e la interazione di prova/cattura sono qui
Altri suggerimenti
C'è un buon articolo su MSDN che parla di trigger e transazioni, situato qui:
http://msdn.microsoft.com/en-us/magazine/cc164032.aspx
Fondamentalmente, si desidera utilizzare le transazioni per rendere atomica l'operazione.