USE AdventureWorks;
GO
BEGIN TRANSACTION;
GO
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 10;
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 11;
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 12;
GO
COMMIT TRANSACTION;
GO
Cosa succede se la prima istruzione di eliminazione non riesce? La seconda e la terza cancellazione verranno eseguite? L'esempio non ha alcuna gestione degli errori, lascerà una transazione aperta nel caso di un'eccezione o eseguirà il rollback della transazione automaticamente da parte di SQL Server? Transazione aperta = risorse bloccate, giusto?È richiesta la ROLLBACK TRANSACTION?
Sto decidendo se è necessario applicare TRY ... CATCH alle stored procedure che utilizzano le transazioni.
Sono a conoscenza di set xact_abort on
, ma voglio sapere cosa succede senza di esso.
Ecco quello che ho trovato in documenti - gestione delle transazioni (Motore di database):
Se un errore impedisce il completamento di una transazione, SQL Server esegue automaticamente il rollback della transazione e libera tutte le risorse possedute dalla transazione
Tuttavia, in altri post ho letto che il rollback automatico non viene attivato.
Sì, usa prova ... cattura. – Ben