CREATE PROCEDURE A AS
begin
declare @error int
set @error = 0
begin tran
exec B
insert into student1(班级号,姓名) values ('001','王五')
set @error = @error + @@error
if @error = 0
commit tran
else
rollback tran
end
GO
CREATE PROCEDURE B AS
begin
declare @error int
set @error = 0
begin tran
insert into student1(班级号,姓名) values ('002','张三')
set @error = @error + @@error
if @error = 0
commit tran
else
rollback tran
end
GO假设 [student1] 表里面已经有 001 王五 002 张三,这两条记录
执行语句 Exec A
结果是,如果 B 出错的话,那么 '001','王五' 这句话还是会执行
我想实现如果 B 出错,后面就不执行了,就是说能保证一个事物
begin
declare @error int
set @error = 0
begin tran
exec B
insert into student1(班级号,姓名) values ('001','王五')
set @error = @error + @@error
if @error = 0
commit tran
else
rollback tran
end
GO
CREATE PROCEDURE B AS
begin
declare @error int
set @error = 0
begin tran
insert into student1(班级号,姓名) values ('002','张三')
set @error = @error + @@error
if @error = 0
commit tran
else
rollback tran
end
GO假设 [student1] 表里面已经有 001 王五 002 张三,这两条记录
执行语句 Exec A
结果是,如果 B 出错的话,那么 '001','王五' 这句话还是会执行
我想实现如果 B 出错,后面就不执行了,就是说能保证一个事物
insert into student1(班级号,姓名) values ('001','王五')
exec B
换个位置就行了
2.@@error对的只是上一操作的返回error。
3.如果要B回滚后,A的下面就不操作,最好是在B里返回一个参数给A,然后A里在exec B后去判断,是否要往下。
3 楼说的还要写东西,可惜我不会写,返回 @@error 的值,还真不会SQL77,那我写完了 SET XACT_ABORT ON,还用在存储过程最后写 SET XACT_ABORT OFF 吗?
对 SQLServer2000 中,其他的会不会有影响