Откат нескольких транзакций при попытке поймать - PullRequest
0 голосов
/ 14 мая 2019

Привет, я изучаю транзакции, и мне трудно понять, как мне использовать откат, когда у меня несколько транзакций с разными именами.Я использую попытку 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 + Имя транзакции?

1 Ответ

1 голос
/ 14 мая 2019

ROLLBACK TRANSACTION без сохранения имени точки-точки или транзакции-отката возвращается к началу транзакции.
Вы можете найти более подробную информацию по адресу: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/rollback-transaction-transact-sql?view=sql-server-2017

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...