【SQL】存储过程事务操作时的注意细节

测试的Proc示例:

-- =============================================
-- Author:x
-- Description:    管理员登录
-- =============================================
ALTER PROC [dbo].[sp_test_1]
    @name NVARCHAR(20)    --客户名称
AS
BEGIN
DECLARE @errorSum INT                 --记录执行过程中的错误
DECLARE @result INT                        -- 1 成功  -1 失败

BEGIN TRANSACTION

        --故意插入一个非法数据,导致出错
    insert into EMAIL_TEMPLATE values(@name,@name,@name,11223366,getdate())
    set @errorSum = @errorSum + @@ERROR
    
        
IF(@errorSum>0)
    BEGIN
        PRINT '交易失败,回滚事务.'
        SET @result = -1
        ROLLBACK TRANSACTION
    END
ELSE
    BEGIN
        PRINT '交易成功,提交事务,写入硬盘,永久保存!'
        SET @result = 1
        COMMIT TRANSACTION
    END

    return @result

END
View Code

 

执行Proc后,截图如下:

 

明明是失败了,可最后又打印出了交易成功的这句话。

原因只有一个:@errorNum不是大于0的,导致逻辑走了成功的那边

 

要修改的话可以给@errorNum一个初始值0,这样执行下来就可以正常显示,此时返回的结果也是 -1

 

posted @ 2021-06-29 11:34  狼窝窝  阅读(40)  评论(0)    收藏  举报