【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
执行Proc后,截图如下:

明明是失败了,可最后又打印出了交易成功的这句话。
原因只有一个:@errorNum不是大于0的,导致逻辑走了成功的那边
要修改的话可以给@errorNum一个初始值0,这样执行下来就可以正常显示,此时返回的结果也是 -1


浙公网安备 33010602011771号