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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top