SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较

SQL SERVER2012实现了类似C#抛出异常的Throw语句。相比较于SQL Server2005之前使用@@ERROR,和SQL Server2005之后使用RAISERROR()引发异常都是一个不小的进步.

 

一、RAISERROR和TRY…CATCH

1.SQL Server2005/2008中,使用RAISERROR和TRY…CATCH语句来抛出异常相比较根据@@ERROR进行判断来讲已经进步了很多。但是使用RAISERROR有一个非常不好的一点是无法返回真正出错的行数。

-- 使用RAISERROR返回错误行数不正确
begin  tran
BEGIN TRY
     select  1 / 0;
commit
END TRY

begin catch
     rollback
     raiserror( ' 自定义错误信息 ', 12, 1)
     print error_message(); -- 遇到以零作除数错误。
end catch
View Code

 SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较_第1张图片

 

RaisError()的弊端
1.严重性级别及其影响非常复杂
2.错误导致的结果及其处理流程非常复杂
--不作处理
--语句终止
--作用域终止
--批处理终止
--事务终止
--连接终止
3.try/catch block导致RaisError不可预测
4.即将被取代

 

二.THROW

使用SQL SERVER2012新增的THROW语句,则变得简单很多。并且能正确返回出错的行,对于比较长的T-SQL语句来说,这节省了不少时间.

-- 使用throw返回正确行数
begin  tran
BEGIN TRY
     select  1 / 0;
commit
END TRY

begin catch
     rollback;
    throw
end catch
View Code

SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较_第2张图片

你可能感兴趣的:(SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较)