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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较相关的知识,希望对你有一定的参考价值。

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

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

 技术分享

 

2.使用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比较的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server ->> THROW字句对比RAISERROR字句

where 子句中的 case 语句 - SQL Server

从命令行构建一个面向 SQL Server 2012 的数据库项目

sql server 2012 - 无法授予对多语句表值函数的选择

如何查看sql server 2008的SQL语句执行错误日志

SQL Server2012中的SequenceNumber尝试