Trigger in combinazione con la transazione


25

Supponiamo di avere la seguente situazione:

Abbiamo un tavolo (diciamo Table_A), che ha un trigger attivato INSERT. Il processo di attivazione consiste nell'aggiornamento di alcune righe in table_Bbase ai valori inseriti in table_A.

Ora, va tutto bene quando inseriamo semplicemente una riga nella tabella, ma per quanto riguarda le situazioni in cui inseriamo i dati attraverso una transazione ?. Il trigger attenderà fino a quando tutte le istruzioni delle transazioni verranno eseguite correttamente o verrà attivato nel momento in cui riconosce l'inserimento ?. Se il trigger si attiva immediatamente quando riconosce il primo inserimento, cosa accadrà se la transazione fallisce nell'ultima riga ?. Esiste un meccanismo per quella situazione?

Risposte:


37

Un inserimento è sempre all'interno di una transazione.

Se non si dispone di un esplicito BEGIN TRAN ... COMMITo SET IMPLICIT_TRANSACTIONS ONl'istruzione viene eseguita come transazione di commit automatico autonomo .

Il trigger fa sempre parte della transazione per l'azione che attiva il trigger. Se si verifica un errore nel trigger che causa il rollback della transazione, verrà ripristinata anche l'azione di attivazione.

I trigger implicitamente hanno attivato XACT_ABORT. Un errore con questa impostazione attiva porterà automaticamente al rollback della transazione (ad eccezione degli errori generati nel codice con la RAISERRORdichiarazione).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.