导航

      想必学习过.net的人已经非常熟悉Tye/catch模型捕获错误的方式,微软在SqlServer2005以后的版本中对事物中的异常处理机制便采用了此方法,它能在不丢失任何事物上下文的情况下捕获T-Sql及事物终止错误。

   一:使用语法:

     Begin Try

        Sql  statement

     End  Try

     Beigin  Catch

       -----捕捉错误的语句

     End Catch

   如果一个显示错误发生于Try代码块中,其控制将立即被传递到紧随其后的catch代码块中那个,如未发生错误 则Catch 全部跳过, 注意Try/catch模型 是基于运行时的错误捕获,对编译时的语法错误等均不执行。

  二 :典型场景应用 

    (1) 标准用法

     begin try 
         select 1/0 as 结果

    end try

    begin catch
    select
        error_Line() as ErrorLine,
        error_Number() as ErrorNumber,
        error_Severity() as errorServerity,
        error_State() as errorstate,
        error_procedure() as errorProcedure,
        error_Message() as ErrorMessage;
    end catch

     执行结果:

 

 

 

 

 

 

 

 

(2)对照说明 

 

   场景一:

   

  Create Procedure MyErrorPro
   as
   select * from  yyy

  

   执行捕获异常的语句:

   begin try
   exec MyErrorPro
   end try
   begin catch
   select
   error_Line() as ErrorLine,
   error_Number() as ErrorNumber,
   error_Severity() as errorServerity,
   error_State() as errorstate,
   error_procedure() as errorProcedure,
   Error_Message() as ErrorMessage;
   end catch
   go

   执行结果:

 

 

   场景二 :

  

   对照Sql 语句

    begin try
        select * from  yyy
   end try
   begin catch
      print 'error'
   end catch

  执行结果:

 

  场景一和场景二在这里对照 充分说明 Try/catch 语句是在运行时捕捉错误的机制   对于编译时的错误不能进行捕获。

 

  三:发展趋势

      在微软Tech.ed 2010 大会上 微软提出SqlServer2011 做改动的几个地方之一 就是完善了异常捕获,但改动不大, Sql2011最大的改变和技术力量还是主要集中于文件存储和大数据对象的处理机制和模式上,届时我们不将不再为文件管理和数据库之间来回转换的问题而烦恼。