Независимо от того, сколько сделок у вас есть, Outer откатить откатов все сделки ..
Когда вы вкладываете сделки, как в вашем случае, каждый поручаем/откат увеличивается или уменьшается @@ TRANCOUNT ..
Из MSDN ..
Каждый НАЧАТЬ приращений TRANSACTION выписки @@ TRANCOUNT один. Каждое заявление COMMIT TRANSACTION или COMMIT WORK уменьшает значение @@ TRANCOUNT на единицу.
ROLLBACK TRANSACTION, который использует имя транзакции из внешней транзакции в наборе вложенных транзакций выполняется откат всех вложенных транзакций и декрементах @@ TRANCOUNT до 0
Смотрите это так: A SQL Server DBA myth a day: (26/30) nested transactions are real
Ниже демо, чтобы проверить это поведение ..
if object_id('t1','u') is not null
drop table t1
create table t1
(
id int
)
go
begin tran outertran
select @@trancount--1
insert into t1
select 1
begin tran innertran
select @@trancount--2
insert into t1
select 2
/**below throws error,since you can reference only outer transaction
-referrring inner tran is not legal
***/
--rollback tran innertran
/***
error you get by uncommneting above
Msg 6401, Level 16, State 1, Line 20
Cannot roll back innertran. No transaction or savepoint of that name was found.
**/
commit tran innertran
select @@trancount--1
rollback --rollbacks all
select * from t1
Ссылки:
http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2630-nested-transactions-are-real/
Возможно, вы захотите прочитать следующее: https://technet.microsoft.com/en-us/library/ms189336(v=sql.105).aspx – Nebi