MSSQL RAISERROR
生成错误消息并启动会话的错误处理。 RAISERROR 可以引用 sys.messages 目录视图中存储的用户定义消息,也可以动态建立消息。 该消息作为服务器错误消息返回到调用应用程序,或返回到 TRY…CATCH 构造的关联 CATCH 块。 新应用程序应改用 THROW。
RAISERROR 生成的错误与数据库引擎代码生成的错误的运行方式相同。 RAISERROR 指定的值由 ERROR_LINE、ERROR_MESSAGE、ERROR_NUMBER、ERROR_PROCEDURE、ERROR_SEVERITY、ERROR_STATE 以及 @@ERROR 等系统函数来报告。 当 RAISERROR 在严重级别为 11 或更高的情况下在 TRY 块中运行,它便会将控制传输至关联的 CATCH 块。 如果 RAISERROR 在下列情况下运行,便会将错误返回到调用方:
在任何 TRY 块的作用域之外运行。
在严重级别为 10 或更低的情况下在 TRY 块中运行。
在严重级别为 20 或更高的情况下终止数据库连接
总结:在使用TRY 块时,严重级别应该在11之上,不高于20,会将控制传输至关联的 CATCH 块.
RAISERROR ( { msg_id | msg_str | @local_variable } { ,severity ,state } [ ,argument [ ,...n ] ] ) [ WITH option [ ,...n ] ]
severity:是与此消息关联的用户定义的严重性级别。 使用 msg_id 引发使用 sp_addmessage 创建的用户定义消息时,RAISERROR 上指定的严重性会替代 sp_addmessage 中指定的严重性。
若要使用 19 到 25 之间的严重级别,必须选择 WITH LOG 选项。 将小于 0 的严重级别解释为 0。 将大于 25 的严重级别解释为 25。
注意,这一点很关键,如果要记录日志,对应用程序的影响最大,用时要慎重。
20 到 25 之间的严重级别被认为是致命的。 如果遇到致命的严重级别,客户端连接将在收到消息后终止,并将错误记录到错误日志和应用程序日志。
State
0 到 255 之间的整数。 负值默认为 1。 不应使用大于 255 的值。
argument:参照事实自行扩充即可。
RAISERROR (N'This is message %s %d,%s.', -- Message text. 16, -- Severity, 1, -- State, N'number', -- First argument. 5,' 我的测试'); -- Second argument.
-- The message text returned is: This is message number 5.
GO 结果:
消息 50000,级别 16,状态 1,第 10 行
This is message number 5, 我的测试.完成时间: 2022-06-22T18:37:16.4665297+08:00
RAISERROR 与 THROW 之间的差异
下表列出了 RAISERROR 和 THROW 语句之间的一些差异。
RAISERROR 语句 | THROW 语句 |
---|---|
如果将 msg_id 传递给 RAISERROR,则必须在 sys.messages 中定义 ID 。 | 无需在 sys.messages 中定义 error_number 参数 。 |
msg_str 参数可以包含 printf 格式设置样式 。 | message 参数不接受 printf 样式的格式设置 。 |
severity 参数指定异常的严重性 。 | 没有 severity 参数 。 当 THROW 被用来发起异常时,严重性始终设置为 16。 但是,当 THROW 用于重新引发一个现有异常时,严重性被设置为该异常的严重级别。 |
不遵循 SET XACT_ABORT。 | 如果 SET XACT_ABORT 为 ON,则会回滚事务。 |
MSSQL RAISERROR相关推荐
- java加载驱动没有异常显示_java – Tomcat没有加载MSSQL驱动程序
我正在尝试将我的webapp部署到Tomcat容器,但是我得到一个例外,说明找不到我的数据库的驱动程序.在本地我测试Jetty上的应用程序,驱动程序jar由Maven提供.我将驱动程序jar复制到To ...
- sqlmap使用_sqlmap从入门到精通第四章47使用EW代理导出和导入MSSQL数据
4.7 使用EW代理导出和导入MSSQL数据 一般的场景就是目标站点获取了webshell,然后数据库的IP地址不在目标站的本地,而且做了精准的访问控制,只允许目标站点的IP地址才能访问数据库,那么这 ...
- mssql mysql 语法区别_mssql与mysql区别之——变量区别
sql server中变量要先申明后赋值: 局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的): 申明局部变量语法:declare @变量名 数据类型:例如:declare ...
- 使用XML在MSSQL把字串分解
今天要在mssql里处理一串Email地址.以分号分开的.以前自己写过一个split函数的.这次想使用xml来处理. mssql 2000和mssql 2005数据库对xml的支持有些不同.至少mss ...
- mysql中leave和_MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法
本文主要向大家介绍了MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. DELIMITER ...
- ibaits插入即获取主键(mssql,mysql,oracle)
oracle主键需预先生成,通过sequence:mysql和mssql是插入后生成. mysql: <insert id="insertStu_mysql" paramet ...
- MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限...
查看数据库的表的时候报如下错误: MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELEC ...
- Python 连接Sql Server数据库 MSSql
Python 想要和MSSql数据库进行交互,首先要下载名为"pymssql"的包,然后import该包即可. 地址:https://pypi.python.org/pypi/py ...
- docker 启动sqlserver_在Docker上安装MSSQL(SQL Server)
在转移到Mac OS X 阵营之后,如果想在本机上安装微软的mssql-server数据库有三种方式: 第一种是在本机上安装MSSQL for Linux 版本. 第二种是安装Windows虚拟机,然 ...
最新文章
- Centos6.3下rsync+sersync安装配置笔记
- WIN32 窗口枚举和操作
- fatal error C1071: unexpected end of file found in comment
- SAPSQL_IN_ITAB_ILLEGAL_OPTION dump
- 涨薪关键之反射机制,引得项目经理对你的看重,加薪触手可及!!!!
- QML学习【一】Basic Types
- 时间操作(Java版)—将毫秒转换为年月日时分秒
- 使用一重循环打印乘法口诀
- 摩托罗拉mpkg安装签名方法研究
- ps6人脸识别液化工具在哪_Photoshop教学:人脸识别液化功能介绍
- 大学生计算机学科竞赛a类,全国大学生学科竞赛分类名单
- 谷歌翻译SDK (Google Translate SDK)的使用
- 连上手机就能偷你信息?一定要注意你身边的共享充电宝。
- 白鹭(egret)工具集介绍一
- 实现系统滚动条换肤功能
- Linux查看硬盘信息方法总结
- 差钱吗?周杰伦线上演唱会没关打赏惹争议,看看同时直播的腾格尔
- 2021年中国动力电池行业发展现状分析,需求推动行业多元化发展「图」
- 基于STM32F103的简易示波器设计
- 计算机网络 王道考研2021 第三章:数据链路层 -- 局域网基本概念和体系结构、以太网(一种常用的局域网技术)、无线局域网、跨省短信通知原因、MAC