/*create table tt(jg numeric(18,2),v varchar(20) not null)
*/
alter  proc test1
as
begin
set nocount on
create table #temp1(jg numeric(18,2))
--insert into #temp1 
--select 'ab'insert into #temp1( jg)
select 1.11insert into #temp1(jg)
select 2begin tran
insert into tt select 1,'ok'
insert into tt(jg) select jg from #temp1
if @@error<>0
begin
rollback tran
select 'Result'=899,'Description'='插入失败!'
return -1endcommit tranend
在存储过程中,执行到任意一步,如果发生错误,存储过程是否是自动终止并返回?在我这个小测试过程中,在事务中引发错误,事务是回滚了,但并没返回我希望的说明
,select 'Result'=899,'Description'='插入失败!',就是这句,这是为什么?怎么样才能返回我自己的错误解释?谢谢

解决方案 »

  1.   

    用 一下结构on err goto line1
    ......  你的代码line1:
    ....... 出错控制语句end
      

  2.   

    2005 可以用@@ERROR 与 TRY...CATCH 方式来捕捉错误
      

  3.   

    那如果不是严重错误,如果我不加错误判断,那么出错后,存储过程还将继续进行?我如果在临时表中准备数据,然后再事务中进行关键业务数据处理,如果在准备数据出错的时候,如果不是严重错误,存储过程还将继续进行,那么数据就是不正确的了?是不是这样?那为了以防万一,在存储过程中,错误判断在每句执行UPDATE,INSERT 语句后都应该有,对不对?谢谢了
    还有,严重错误的等级是如何划分的?
      

  4.   

    那如果不是严重错误,如果我不加错误判断,那么出错后,存储过程还将继续进行? 
    不会,必须要做出错判断,用 @@ERROR  或者 raiserror  来捕捉才行
      

  5.   

    事务一直有的,只是你不管就是隐性的,SQL自己管理  了
      

  6.   

    没明白,我不加事务,那么执行错误的那一步前执行的,我看都是生效了的,所以这个隐性的,SQL自己管理 好像没什么意义啊
    下面这句是我的总结的问题,万望给个明确的答复,谢谢啦在存储过程中,无论发生什么级别的错误,都不会继续往下执行了?在事物中加个错误判断,然后执行回滚,这个是必要的,否则不需要事务的地方,我也可以不加错误捕捉了?我的理解对否?
      

  7.   

    2005 可以用 @@ERROR 与 TRY...CATCH 方式来捕捉错误