Глядя на электронную документацию по SQL Server, Microsoft, кажется, имеет (неверный)метод обработки вложенных транзакций в хранимой процедуре:
Nesting Transactions
Explicit transactions can be nested. This is primarily intended to support transactions in stored procedures that can be called either from a process already in a transaction or from processes that have no active transaction.
Далее в примере показана хранимая процедура, которая запускает собственную транзакцию (. «Процедура обеспечивает выполнение своей транзакции независимо от режима транзакции любого процесса, который ее выполняет».):
CREATE PROCEDURE TransProc @PriKey INT, @CharCol CHAR(3) AS
BEGIN TRANSACTION InProc
...
COMMIT TRANSACTION InProc;
Эта процедура затем может быть вызвана без выполнения транзакции:
EXECUTE TransProc 3,'bbb';
Или с явной транзакцией:
BEGIN TRANSACTION OutOfProc;
EXEC TransProc 1, 'aaa';
COMMIT TRANSACTION OutOfProc
Чего они не касаются, так это того, что происходит, когда хранимый продукт:
Нет:
SET XACT_ABORT ON
где-нибудь в каноническом примере.
Если бы я не знал лучше, я бы подумал, что строка:
The following example shows the intended use of nested transactions.
на самом деле следует читать
The following example shows the how not to use nested transactions.
Разве кто-то может сделать орел или решку из этого примера BOL?