Condividi tramite


Durata delle transazioni

Vi è un'importante differenza tra le transazioni avviate nelle stored procedure Transact-SQL e quelle avviate in codice gestito: il codice CLR (Common Language Runtime) non può sbilanciare lo stato della transazione all'immissione o all'uscita di una chiamata CLR. Tenere presenti le implicazioni seguenti correlate a questa differenza:

  • È necessario eseguire il commit o il rollback di una transazione avviata all'interno di un frame CLR. In caso contrario, SQL Server genera un errore quando si esce dal frame.

  • Non è possibile eseguire il commit o il rollback di una transazione esterna all'interno del codice CLR.

  • Un tentativo di esecuzione del commit di una transazione non avviato nella stessa procedura provoca un errore di runtime.

  • Un tentativo di esecuzione del rollback di una transazione non avviato nella stessa procedura fa in modo che la transazione si blocchi, impedendo il verificarsi di qualsiasi altra operazione con effetto collaterale. La transazione viene interrotta fino a quando il codice CLR non abbandona l'ambito. Si noti che questo comportamento può risultare utile quando si rileva un errore all'interno della procedura e si desidera verificare che venga terminata l'intera transazione.