精通SqlServer2005学习笔记----Sqlserver事物中的异常处理
Posted on 2011-01-17 14:54 qingfengtanying 阅读(1175) 评论(0) 编辑 收藏 举报想必学习过.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
执行结果:
![](https://images.cnblogs.com/cnblogs_com/qingfengtanying/sql1.jpg)
(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最大的改变和技术力量还是主要集中于文件存储和大数据对象的处理机制和模式上,届时我们不将不再为文件管理和数据库之间来回转换的问题而烦恼。