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
Однако я читал в других сообщениях, что автоматический откат не запускается.