У меня следующая проблема. Я должен хранимых процедур (отладочные сообщения с двойным отступом):
CREATE PROC innerProc
AS
BEGIN
SELECT 'innerProc 1',@@TRANCOUNT
BEGIN TRAN
SELECT 'innerProc 2',@@TRANCOUNT
ROLLBACK
SELECT 'innerProc 3',@@TRANCOUNT
END
GO -----------------------------------------
CREATE PROC outerProc
AS
BEGIN
SELECT 'outerProc 1',@@TRANCOUNT
BEGIN TRAN
SELECT 'outerProc 2',@@TRANCOUNT
EXEC innerProc
SELECT 'outerProc 3',@@TRANCOUNT
ROLLBACK
SELECT 'outerProc 4',@@TRANCOUNT
END
GO -----------------------------------------
EXEC outerProc
Что они делают?
outerProc
начинает транзакцию (@@ TRANCOUNT = 1)
- выполняет
innerProc
(@@ TRANCOUNT в начале процедуры = 1)
innerProc
начинает другую транзакцию (@@ TRANCOUNT = 2)
innerProc
транзакция отката (@@ TRANCOUNT = 0)
- И ЕСТЬ ПРОБЛЕМА : @@ TRANCOUNT в начале
innerProc
не равно @@ TRANCOUNT в конце. Что я делаю неправильно? Это правильный подход?