BEGIN和COMMIT语句的数量不匹配

时间:2016-01-27 03:33:17

标签: sql-server

我在这里看到了一些关于这个问题的帖子,但似乎都没有适用于我的代码。这是我的代码。任何人都可以给我一些关于我可能做错的建议。据我所知,我每次都会执行COMMIT或ROLLBACK。但是我总是得到以下错误。请注意我编辑了代码并在插入后删除了一些东西,使其变小,以便它适合页面。

CREATE PROCEDURE post_user_test
    @ErrorMessage nvarchar(1000) OUTPUT,
    @RC     INT OUTPUT

AS
BEGIN
    BEGIN TRY   
        DECLARE @SEQ INT;
        BEGIN TRANSACTION
        SELECT @SEQ = Isnull(@SEQ,0)
        INSERT INTO dbo.UserTest .....
        IF (@@ROWCOUNT != 1) THROW 50001,'xxx',1  
        SET @UserTestId = SCOPE_IDENTITY()
        INSERT INTO dbo.UserTestQuestion .....
        IF (@@ROWCOUNT != 1) THROW 50002,'xxx',1
        SET @RC = 0
        COMMIT TRANSACTION
        RETURN 
    END TRY
    BEGIN CATCH
        SET @RC = 1
        SET @ErrorMessage = ERROR_MESSAGE()
        ROLLBACK TRANSACTION
        RETURN
    END CATCH 
END

这是我收到的错误消息:

  

意外错误:{"消息":" EXECUTE后的事务计数表示   BEGIN和COMMIT语句的数量不匹配。

1 个答案:

答案 0 :(得分:0)

以下是您的代码的更新版本..添加了;以及检查了catch块中的回滚计数..并删除了RETURN语句

 CREATE PROCEDURE post_user_test
     @ErrorMessage nvarchar(1000) OUTPUT,
     @RC     INT OUTPUT

 AS
 BEGIN
     BEGIN TRY   
         DECLARE @SEQ INT;
         BEGIN TRANSACTION;
         SELECT @SEQ = Isnull(@SEQ,0);
         INSERT INTO dbo.UserTest .....;
         IF (@@ROWCOUNT != 1) THROW 50001,'xxx',1  
         SET @UserTestId = SCOPE_IDENTITY();
         INSERT INTO dbo.UserTestQuestion .....;
         IF (@@ROWCOUNT != 1) THROW 50002,'xxx',1
         SET @RC = 0;
         COMMIT TRANSACTION;
     END TRY
     BEGIN CATCH
         IF @@TRANCOUNT > 0
         ROLLBACK TRANSACTION;
         SET @RC = 1;
         SET @ErrorMessage = ERROR_MESSAGE();
     END CATCH 
 END;

希望这会有所帮助..