Привет, я изучаю транзакции, и мне трудно понять, как мне использовать откат, когда у меня несколько транзакций с разными именами.Я использую попытку catch для вызова отката в случае возникновения ошибки
CREATE PROCEDURE InsertFromPDP
AS
BEGIN
DECLARE @tempTable TABLE
(
Id INT PRIMARY KEY,
Referencia VARCHAR(15),
UAP NVARCHAR(20),
ConsumoInicialWeek01 FLOAT,
ConsumoInicialWeek02 FLOAT,
Stock INT,
PecasPorCaixa INT,
NumTurnos INT DEFAULT 3,
NumPab INT DEFAULT 6,
AlcanceAbastecimento INT DEFAULT 3,
QtdMin INT DEFAULT 4,
QtdMax INT DEFAULT 12,
NumDias INT DEFAULT 5
UNIQUE (Id)
)
INSERT INTO
@tempTable
(
Id,
Referencia,
UAP,
ConsumoInicialWeek01,
ConsumoInicialWeek02,
Stock,
PecasPorCaixa
)
SELECT
*
FROM
viewConsumoPDP
BEGIN TRY
BEGIN TRAN InsertNotExistsReferenciasFromPDP;
INSERT INTO
Parametros
SELECT
M.Referencia,
M.UAP,
M.NumTurnos,
M.NumPab,
M.AlcanceAbastecimento,
M.QtdMin,
M.QtdMax,
M.NumDias
FROM
@tempTable M
WHERE
NOT EXISTS
(
SELECT
*
FROM Parametros P
WHERE
M.Referencia <> P.Referencia
AND
M.UAP <> P.UAP
)
BEGIN TRAN InsertConsumoFromPDP
-- TODO--
COMMIT InsertNotExistsReferenciasFromPDP
COMMIT InsertConsumoFromPDP
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK InsertNotExistsReferenciasFromPDP
ROLLBACK InsertConsumoFromPDP
-- RAISE ERROR --
END CATCH
END
Есть ли способ откатить все именованные транзакции всего одной командой без указания ROLLBACK + Имя транзакции?