create proc up_xxx(@ret int output) as 
begin
set xact_abort on
begin tran
  delete from t_x where ...  if @@error<>0
  begin
    rollback tran
    set @ret=0   
  end  insert into t_x select ....  if @@error<>0
  begin
    rollback tran
    set @ret=0   
  end  update t_x set size='c+1' where ...  if @@error<>0
  begin
    rollback tran
    set @ret=0   
  end  set @ret=1 
commit tran
end如上面的存储过程在执行过程中产生回滚了,请问调用后@ret返回来会=0么?事务回滚了,sqlserver会返回一个值,
由C#,delphi那边的客户端去捕获,
然后告知使用者操作实际上没成功。

解决方案 »

  1.   

    如上面的存储过程在执行过程中产生回滚了,请问调用后@ret返回来会=0么?会返回的.
      

  2.   

    我以前测试过好像不返回0的,oracel的存储过程中使用exception ...when ...then 是可以返回的,然后我就利用这个返回值判断存储过程是否被成功执行
      

  3.   

    应该不返回任何值。因为你设置了set xact_abort on,此标志表示如需要任何错误,则回滚事务并终止批的执行。你可以将set xact_abort off就有返回值了。
      

  4.   

    应该不返回任何值。因为你设置了set xact_abort on,此标志表示如需要任何错误,则回滚事务并终止批的执行。你可以将set xact_abort off就有返回值了。但是你需要保持事务的一致性!!!!!现在我需要知道的是:如果事务回滚了,如何通知使用者提交没有成功。
      

  5.   

    我记得sqlserver事务回滚的话好像很会返回一个代码的