drop procedure OuterPro
go
create procedure OuterPro
as
begin
declare
@a int,
@b int
begin tran
set @a=1
set @b=2
declare @c int
set @c=@a+@b
print 'c is :' +convert(varchar(2),@c)
exec InnerPro 0
if @@error <>0
begin
print 'before rollback'
rollback tran
print 'OuterPro find InnerPro error'
end
declare @s int
set @s=@a*@b
print 's is :'+convert(varchar(2),@s)
commit tran
end
go
drop Procedure InnerPro
go
create Procedure InnerPro
@c int
as
begin
declare
@d int ,
@e int
set @d=100
set @e=@d/@c
if @@error <>0
print 'innerPro error'
else
print @e
end
go
exec OuterPro
输出结果: c is :3服务器: 消息 8134,级别 16,状态 1,过程 InnerPro,行 10遇到被零除错误。innerPro errors is :2
修改 InnerPro:
drop Procedure InnerPro
go
create Procedure InnerPro
@c int
as
begin
declare
@d int ,
@e int
set @d=100
begin tran tran_innner
set @e=@d/@c
if @@error <>0
begin
print 'innerPro error'
rollback tran tran_innner
print 'innerPro is rollbacked '
end
else
print @e
end
go
调用:exec OuterPro
输入结果:
c is :3
服务器: 消息 8134,级别 16,状态 1,过程 InnerPro,行 10
遇到被零除错误。
innerPro error
服务器: 消息 6401,级别 16,状态 1,过程 InnerPro,行 15
无法回滚 tran_innner。没有找到任何该名称的事务或保存点。
innerPro is rollbacked
服务器: 消息 266,级别 16,状态 2,过程 InnerPro,行 65535
EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 1,当前计数 = 2。
before rollback
OuterPro find InnerPro error
s is :2
服务器: 消息 3902,级别 16,状态 1,过程 OuterPro,行 27
COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
服务器: 消息 8134,级别 16,状态 1,过程 InnerPro,行 10
遇到被零除错误。
innerPro error
服务器: 消息 6401,级别 16,状态 1,过程 InnerPro,行 15
无法回滚 tran_innner。没有找到任何该名称的事务或保存点。
innerPro is rollbacked
服务器: 消息 266,级别 16,状态 2,过程 InnerPro,行 65535
EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 1,当前计数 = 2。
before rollback
OuterPro find InnerPro error
s is :2
服务器: 消息 3902,级别 16,状态 1,过程 OuterPro,行 27
COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
浙公网安备 33010602011771号