sql 验证测试

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。
 

你可能感兴趣的:(sql)