日期:2014-05-18  浏览次数:20536 次

一个事务的问题
begin   tran
...
if(a> 1)
begin  
      if(b> 1)
          raiserror( "b不能大于1 ",18,18)
end
if(a <1)
begin
      if(c> 1)
          raiserror( "b不能大于1 ",18,18)
end

..具体操作

我想在上面那里,任意有raiserror发生就不执行下面的具体操作,该怎么处理
我在这样写但不行


if(@@error=0)
commit   tran
else  
rollback   tran

但是这样写就算上面出现了raiserror,下面仍然照样执行

------解决方案--------------------
呵呵,加return
------解决方案--------------------
定义一个变量,在执行前给它赋一个值,如果出错,则把它改成另一个值,这样执行结束后去判断它就可以了
------解决方案--------------------
写成存储过程 :

create proc usp_2
as
begin tran
select * into tttt from ttttttttttttttttt
if @@error <> 0
begin
rollback tran
return
end
select * into tt111 from t

-- rollback tran
if @@error <> 0
begin
rollback tran
return
end
commit tran