Исключение количества транзакций после EXECUTE - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь сохранить данные журнала в таблицу в SQL. Я хочу отслеживать как успехи, так и ошибки во время операций SQL. Даже когда возникает исключение SQL, я хочу также его скормить.

Я настроил выходной параметр, и в зависимости от успеха или ошибки его значение изменяется. При вызове этого SP я получаю сообщение об ошибке типа

Количество транзакций после EXECUTE указывает на несовпадающее количество операторов BEGIN и COMMIT. Предыдущее количество = 0, текущее количество = 1. Транзакция, которая была запущена в пакете MARS, все еще активна в конце пакета. Откат транзакции

Ниже приведен полный SP.

ALTER PROCEDURE [dbo].[Proc_PIP_Employee]
    @Flag int,
    @Empid int,
    @Name varchar(500),
    @Designation varchar(200),
    @Department varchar(200),
    @DateofJoin datetime,
    @Phone varchar(10),
    @Isactive int,
    @LoginUser nvarchar(500),
    @ReturnId int output

AS
BEGIN
    SET NOCOUNT ON ;
     DECLARE @errorMessage VarChar(8000), 
                @errorSeverity Int,
                @errorState Int,
                @AlCode varchar(50),
                @AlDesc varchar(1000),
                @AlOp varchar(50),
                @AlStatus varchar(50)
    BEGIN TRY
    BEGIN TRANSACTION

        IF (@Flag = 1)
        BEGIN
            IF EXISTS (SELECT 1 FROM dbo.PIP_Employee 
                       GROUP BY Name, Phone 
                       HAVING COUNT(ID) > 0 
                          AND Name = @Name AND Phone = @Phone)
            BEGIN
                SET @ReturnId = 0
                SET @AlCode = 'ERR_1001'
                SET @AlDesc = CONCAT('Add Record of ',@Name,' failed due to duplicate entry')
                SET @AlOp = 'ADD'
                SET @AlStatus = 'ERROR'
                GOTO AuditLog
            END
            ELSE
            BEGIN
                INSERT INTO dbo.PIP_Employee (Name, Designation, Department, DateofJoin, Phone, IsPresent) 
                VALUES (@Name, @Designation, @Department, @DateofJoin, @Phone, @Isactive)

                SET @ReturnId = 1
                  SET @AlCode = 'SUCC_1002'
                SET @AlDesc = CONCAT('Record of ',@Name,' added Successfully')
                SET @AlOp = 'ADD'
                SET @AlStatus = 'SUCCESS'
                GOTO AuditLog

            END

            return @ReturnId
        END

        COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
        SET @ReturnId = 0
        SET @AlCode = ERROR_SEVERITY()
        SET @AlDesc = ERROR_MESSAGE()
        SET @AlOp = 'SQL TRANSACTION FAILURE'
        SET @AlStatus = ERROR_STATE();

        IF (@@trancount > 0)
            ROLLBACK TRANSACTION

            GOTO AuditLog 
            RETURN @ReturnId 

    END CATCH

    AuditLog:
    INSERT INTO dbo.PIP_AuditLog (Aud_Code, Aud_Desc, Aud_Operation, Aud_Status, Aud_Createddate, Aud_ActionBy) 
    VALUES (@AlCode, @AlDesc, @AlOp, @AlStatus, GETDATE(), @LoginUser)


    SET NOCOUNT OFF
END

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