个人理解:
分为两个不同的批处理任务进行提交,两个任务分别执行,互不干涉,由于第二个任务未产生错误,@@ERROR恰好保留了第一个任务中的错误。 在第二种情况下两条语句作为一个任务提交,前面产生的错误中断了后面语句的执行。 
不过现在有没有什么办法可以让脚本出错后继续执行,当然我现在不能用GO来把代码分开执行。我想这样就可以抓到这个错误了。有没有高手可以帮帮我啊,谢谢了!!
 

解决方案 »

  1.   

    declare @rc int
    select @rc=0
    begin
        update from table set aa=1
        select @rc=@@error
      print @RC
    go
      

  2.   

    leimin(黄山光明顶) ,
       还是不行啊,这个方法我试过,没有什么区别,还有你的Begin没有END,
      

  3.   

    刚才写了个长了,没提交上,晕到ingdeclare @uperr int
    begin tran(都大写)
    update from table set aa=1
     if uperr = 0 
      begin
      commit tran
      end 
      else
      begin
      print @@error
      rollbake tran
      end 
    go
      

  4.   

    我试了,还是不行,if uperr = 0 这个地方我看不懂什么意思,是不是这样:if @uperr = 0 ,
    但即使这样,也不对啊,再详细点可以吗?
      

  5.   

    在冲一点
    PB 15,2
    C++BU,DELPHI 16,1
      

  6.   

    declare @intErrorCode int, @chrvErrorMesg varchar(60), @intTransactionCountOnEntry int
    select @intErrorCode=@@Error if @intErrorCode=0
    begin
      select @intTransactionCountOnEntry=@@TranCount
      begin Tran
    endif @intErrorCode=0
    begin
      update from table set aa=1
      select @intErrorCode=@@error
      select @chrvErrorMesg=cast(@intErrorCode as varchar(6))+' 出错信息'
      if @intErrorCode<>0 goto Err_Handler
    endErr_Handler:
    if @@TranCount> @intTransactionCountOnEntry
    begin
      if @intErrorCode = 0
        commit transaction
      else begin
        raiserror(@chrvErrorMesg,11,1)
        rollback transaction
      end
    end
    Return @intErrorCode
      

  7.   

    非常感谢各位的帮助,现在还是有问题
    update from table set aa=1 这个语句出错是致命的,所以我刚才运行 DelphiSQL2K() 写的脚本时,还是捕不到错误,是不是SQL就是抓不到致命错误还是其它什么原因??