Требуется ли ROLLBACK TRANSACTION?

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

Что произойдет, если первый оператор удаления завершится ошибкой? Будут ли выполняться 2-й и 3-й операторы удаления? В примере нет никакой обработки ошибок, оставит ли он открытую транзакцию в случае исключения или SQL Server автоматически отменит транзакцию? Открытая транзакция = заблокированные ресурсы, верно?

Я решаю, следует ли применять TRY...CATCH к хранимым процедурам, использующим транзакции.

Я знаю о set xact_abort on, но хочу знать, что будет без него.

Вот что я нашел в документах -Управление транзакциями (Механизм базы данных):

If an error prevents the successful completion of a transaction, SQL Server automatically rolls back the transaction and frees all resources held by the transaction

Однако я читал в других сообщениях, что автоматический откат не запускается.

8
задан net_prog 10 July 2012 в 13:47
поделиться