SQL Server 2012开始引入了THROW字句用于替代从SQL Server开始沿用至今的RAISERROR。既然作用相同,都是在TRY... CATCH代码块后不抓错误然后抛出错误,它们之间的差异是什么?

RAISERROR statement THROW statement
If a msg_id is passed to RAISERROR, the ID must be defined in sys.messages. The error_number parameter does not have to be defined in sys.messages.
The msg_str parameter can contain printf formatting styles. The message parameter does not accept printf style formatting.
The severity parameter specifies the severity of the exception. There is no severity parameter. The exception severity is always set to 16.

上表列出了它们的差异

THROW对比RAISERROR最大的优势在于,我们不再需要在CATCH代码块里面捕捉到ERROR_MESSAGE(), ERROR_STATE()等几个系统函数的值然后赋值给变量,只需要一个THROW语句就可以完成原本RAISERROR需要赋值变量再通过参数传入抛出异常的过程。而且对于错误行的捕捉也是直接指向错误行,而不是像RAISERROR那样是RAISERROR语句发生时的代码行。而且THROW还是可以像RAISERROR一样可以传参,效果和RAISERROR是一样的。

总结就是RAISERROR可以做的THROW都可以做到,而THROW还可以节省RAISERROR原本需要多个步骤完成的事情。而微软也是推荐用THROW去代替RAISERROR。

-- Using THROW - 1
BEGIN TRYSELECT 1/0 as DivideByZero
END TRY
BEGIN CATCHTHROW;
END CATCH
GO

结果

(0 row(s) affected)
Msg 8134, Level 16, State 1, Line 6
Divide by zero error encountered.

而如果用RAISERROR

USE [JerryDB]
GO-- Using RAISERROR()
DECLARE @ERR_MSG AS NVARCHAR(4000),@ERR_SEV AS SMALLINT,@ERR_STA AS SMALLINTBEGIN TRYSELECT 1/0 as DivideByZero
END TRY
BEGIN CATCHSELECT @ERR_MSG = ERROR_MESSAGE(),@ERR_SEV =ERROR_SEVERITY(),@ERR_STA = ERROR_STATE()SET @ERR_MSG= 'Error occurred while retrieving the data from database: ' + @ERR_MSGRAISERROR (@ERR_MSG, @ERR_SEV, @ERR_STA) WITH NOWAIT
END CATCH
GO

结果

(0 row(s) affected)
Msg 50000, Level 16, State 1, Line 19
Error occurred while retrieving the data from database: Divide by zero error encountered.

参考:

New THROW statement in SQL Server 2012 (vs RAISERROR)

转载于:https://www.cnblogs.com/jenrrychen/p/5164889.html

SQL Server - THROW字句对比RAISERROR子句相关推荐

  1. SQL Server 存储过程中使用raiserror抛出异常

    转自(SQL Server 存储过程中使用raiserror抛出异常 ) 一 系统预定义错误代码 SQL Server 有3831个预定义错误代码,由master.dbo.sysmessages 表维 ...

  2. SQL Server 20082005维护计划对比

    SQL Server 2008维护计划中组件没有增加,同样还是十一个,只是在向导中将"清除维护"任务添加了进来,如下图所示 而在向导的第一步中,SQL Server 2005是选择 ...

  3. SQL Server与Oracle对比学习:权限管理(一)

    http://blog.csdn.net/weiwenhp/article/details/8093661 我们发现我们现在的生活中到处是涉及到密码,你要记各种各样的密码.比如银行卡,邮件,QQ,微博 ...

  4. SQL Server学习笔记3——WHERE子句

    1.WHERE语句格式 SELECT <字段列表> FROM <表名> WHERE <条件表达式> 2.WHERE语句条件表达式中可以用到的比较运算符

  5. Oracle 9i与MS SQL Server 2000之比较连载五.zz

    http://kb.cnblogs.com/a/1153156 Oracle 9i与MS SQL Server 2000之比较连载五 2008-04-14 18:13 四.Oracle中新的数据库对象 ...

  6. SQL Server 中WITH (NOLOCK)浅析

    概念介绍 开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种.它等同于 READUNCOMMITTED . 具体的功能作用如 ...

  7. SQL Server 中WITH (NOLOCK)浅析 2014-08-30 11:58 by 潇湘隐者, 58264 阅读, 33 评论, 收藏, 编辑 概念介绍 开发人员喜欢在SQL脚本

    SQL Server 中WITH (NOLOCK)浅析 概念介绍 开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种.它等同 ...

  8. mysql union all sum_[数据库]SQL Server UNION ALL 结果 SUM函数造成精度丢失

    [数据库]SQL Server UNION ALL 结果 SUM函数造成精度丢失 0 2020-08-03 18:00:30 SQL Server 数据类型 使用场景: 在进行多维度汇总数据时,需要将 ...

  9. 微软 SQL Server 2016 迁移技术培训实验营

     SQL 微软数据平台的专家们,您们还在为不了解 Oracle 产品技术而苦恼吗?您还在为无法提供 Oracle 客户迁移服务而困惑吗?快来参加此次微软 SQL Server 2016 迁移技术动 ...

最新文章

  1. 我在学python-你们以为我在学C++?其实我在学Python!人生苦短!
  2. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
  3. 理解javascript中的回调函数(callback)【转】
  4. ceil与intval区别
  5. windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群
  6. (转)如何压缩SQL Server 2005指定数据库文件和日志的大小?
  7. leetcode刷题:除自身以外数组的乘积
  8. springboot连接redis错误 io.lettuce.core.RedisCommandTimeoutException:
  9. Castle Team宣布Castle将与ASP.NET MVC整合
  10. line: 1: Syntax error: word unexpected (expecting ))
  11. c语言ic卡读写软件,IC卡读写工具|ACR122U写卡软件下载 v3.7 免费版_最火软件站
  12. python无限锁屏_定时锁屏程序,Python祝你原理猝死!
  13. 智慧金融管理系统提供个性化的智能客户服务
  14. c语言科学计数法 10的负8次方,3*10的负8次方等于多少?为什么计算
  15. 微信小程序flex布局讲解
  16. 北京邮电大学计算机学院考研夏令营,北京邮电大学计算机学院(专业学位)计算机技术保研夏令营...
  17. iOS视频转码 mov 转 mp4
  18. 開關(switch)規格中,SPDT, DPDT, 3PDT, 4PDT是什麼意思?
  19. python花猫_涨见识了,在终端执行 Python 代码的 6 种方式!
  20. 2020年河南高考--各高校在河南录取分数线预测(本科二批——文科)

热门文章

  1. flask-sqlalchemy CURD
  2. gitlab releases
  3. jinja Macros
  4. shell test
  5. pytorch torch.optim.Optimizer
  6. docker 容器命令
  7. CentOS7没有ftp命令的解决方法
  8. android修改屏幕长宽比例,Android屏幕适配之修改density
  9. 等级保护2.0发布!过了4级的华为云如何帮助你?
  10. Kubernetes学习总结(18)—— Kubernetes 容器网络