SQL Server 2005的以前版本很少提供错误处理的办法,Raiserror()是方法之一。SQL Server 2005增加了Try/Catch语句,它模仿Java及其它开发语言中的相似结构。
Try/Catch语句由两个块——Try块和Catch块——组成,每个块可包含几个语句。列表A是一个伪代码的简单实例。
如果插入或更新失败,隐式事务被退回。插入语言无法继续(即它出错)而更新语句失败。二者要么同步继续,要么一起失败。
(注意:由Catch块捕获的错误不会返回给调用方。)
在SQL Server 2000中,任何毁灭性的错误(即严重程度大于17的错误)会立即中止执行并中断连接。而在SQL Server 2005中,引擎会试图处理错误并继续执行操作。列表B说明了这种情况。
将列表B中的代码粘贴到Management Studio中的一个新查询窗口中,然后执行这段代码,得到的结果如下:
Begin Try
Begin Catch
Variable @int = 0
Code Completed
Try块试图除以零,这一操作立即调用Catch块;它打印信息并将变量赋值为零。继续执行代码,打印最后两个语句。
应用Catch块中的内置函数
SQL Server 2005的Catch块中新增加了六个函数。下面简单说明各个函数:
为说明这些函数的用法,我对代码进行了修改,见列表C。
用户评论