怎么实现以下效果?create proc p1
as
exec p2
if 本过程出错 or p2内部出错
rollback tran
else
commit tran
-----------------------------------
create proc p2
as可能出错代码
as
exec p2
if 本过程出错 or p2内部出错
rollback tran
else
commit tran
-----------------------------------
create proc p2
as可能出错代码
as
begin
begin tran
exec p2
if @@error=0
commit
else
rollback
end
p1 的@@error没有累加p2里的错误数的吧我没表达清楚,其实我想要的效果是:create proc p1
as
exec p2
exec p3 ------------------在运行p1后,无论是p1、p2、p3任何一个过程出错,就要三个过程同时回滚!
简单说就是要么三个过程都执行,要么都不执行
只要有错就回滚了
create proc p1
as
exec p2
SET XACT_ABORT ON
-----------------------------------
create proc p2
as
as
select 1/0 -- 这里失败
select 1 -- 这里成功
go
create proc p1
as
begin
begin tran
exec p2
if @@error=0 -- 则这里由于最后一个语句是成功的, 所以这个值为 0
begin
commit
print 'commit'
end
else
begin
rollback
print 'rollback'
end
end
go
exec p1
go
drop proc p1, p2
as
select 1/0 -- 这里失败
select 1 -- 这里成功
go
create proc p1
as
begin
begin tran
declare @re int
exec @re = p2
if @@error=0 and @re = 0 -- 则这里由于最后一个语句是成功的, 所以这个值为 0, 但存储过程出错后 rerun 为非 0
begin
commit
print 'commit'
end
else
begin
rollback
print 'rollback'
end
end
go
exec p1
go
drop proc p1, p2
create proc p2
as
select 1/0 -- 这里失败
if @@error <> 0
return 0
select 1 -- 这里成功
if @@error <> 0
return 0
go