SQL-SERVER2008 存储过程-子过程回滚

USE [******]
GO
/****** Object:  StoredProcedure [dbo].[CJdemo]    Script Date: 07/31/2017 17:47:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: ( Jetaime )
-- Create date:      ( 2017-07-29 11:17 )
-- Description: ( 过程DEMO1 )
-- =============================================
ALTER PROCEDURE [dbo].[CJdemo] 
@Rstatus INT OUTPUT,--返回标识号 0 成功 
@Rcode INT OUTPUT,--返回错误编码
@Rmsg VARCHAR(128) OUTPUT--返回描述状态说明标识
AS
declare @tran_counts  int

begin

--保存执行当前事务计数

set @tran_counts = @@TRANCOUNT

if(@tran_counts > 0)

begin

--作为子过程,设置会滚点

save tran CJdemo1_P

end

else

begin

--作为主过程运行,开始事务

begin tran

end

begin try

--正确执行语句

insert into parkErr (proName,proErr,proTime) values('1','123',GETDATE())

--错误执行语句

insert into parkErr (proName,proErr,proTime) values('2','456','1234')

if(0 = @tran_counts)

begin

set @Rstatus = 0

set @Rcode = 0

set @Rmsg = '成功返回'

--事务提交

commit tran

end

end try

begin catch

if(0 = @tran_counts)

begin

set @Rstatus = -1

set @Rcode = 0

set @Rmsg = '过程出错'

--回滚

rollback tran

--记录错误日志

exec dbo.CJ_ERR 

end

else

begin

if(-1 <> XACT_STATE())

begin

set @Rstatus = -1

set @Rcode = 0

set @Rmsg = '子过程出错'

--回滚到还原点

rollback tran CJdemo1_P

--记录错误日志

exec dbo.CJ_ERR

end

end

end catch

end

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

图1:作为父过程执行

 

图2:作为子过程执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值