我在这里看到了一些关于这个问题的帖子,但似乎都没有适用于我的代码。这是我的代码。任何人都可以给我一些关于我可能做错的建议。据我所知,我每次都会执行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语句的数量不匹配。
答案 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;
希望这会有所帮助..