SQL 中 RAISERROR 的用法

article/2025/8/26 1:33:31
raiserror  是由单词 raise error 组成
     raise  增加; 提高; 提升


raiserror 的作用 : raiserror 是用于抛出一个错误。[ 以下资料来源于sql server 2005的帮助 ]

其语法如下:

RAISERROR  ( { msg_id  |  msg_str  |   @local_variable  }        
            { ,severity ,state }        
            
[  ,argument [ ,...n  ]  ] 
          )       
   
[  WITH option [ ,...n  ]  ]

简要说明一下:

第一个参数 :{ msg_id | msg_str | @local_variable }
      msg_id:表示可以是一个sys.messages表中定义的消息代号;
              使用 sp_addmessage 存储在 sys.messages 目录视图中的用户定义错误消息号。
              用户定义错误消息的错误号应当大于 50000。

     msg_str:表示也可以是一个用户定义消息,该错误消息最长可以有 2047 个字符;
             (如果是常量,请使用N'xxxx',因为是nvarchar的)
              当指定 msg_str 时,RAISERROR 将引发一个错误号为 5000 的错误消息。

     @local_variable:表示也可以是按照 msg_str 方式的格式化字符串变量。
           
第二个参数:severity
            用户定义的与该消息关联的严重级别。(这个很重要)
            任何用户都可以指定 0 到 18 之间的严重级别。
            [0,10]的闭区间内,不会跳到catch;
            如果是[11,19],则跳到catch;
            如果[20,无穷),则直接终止数据库连接;

第三个参数:state
            如果在多个位置引发相同的用户定义错误,
            则针对每个位置使用唯一的状态号有助于找到引发错误的代码段。
          
            介于 1 至 127 之间的任意整数。(state 默认值为1)
            当state 值为 0 或大于 127 时会生成错误!

第四个参数:argument
            用于代替 msg_str 或对应于 msg_id 的消息中的定义的变量的参数。

第五个参数:option
            错误的自定义选项,可以是下表中的任一值:
            LOG :在错误日志和应用程序日志中记录错误;
            NOWAIT:将消息立即发送给客户端;
            SETERROR:将 @@ERROR 值和 ERROR_NUMBER 值设置为 msg_id 或 50000;
 
 
[SQL]代码示例

--示例1
DECLARE   @raiseErrorCode   nvarchar ( 50 )
SET   @raiseErrorCode   =   CONVERT ( nvarchar ( 50 ), YOUR  UNIQUEIDENTIFIER   KEY )
RAISERROR ( ' %s INVALID ID. There is no record in table ' , 16 , 1 @raiseErrorCode )

 

--示例2
复制代码
RAISERROR  (
             N
' This is message %s %d. ' --  Message text,
              10 ,                         --  Severity,
              1 ,                          --  State,
             N ' number ' ,                  --  First argument.
              5                            --  Second argument.
          ); 
--  The message text returned is: This is message number 5.
GO
复制代码


--示例3
复制代码
RAISERROR  (N ' <<%*.*s>> ' --  Message text.
            10 ,            --  Severity,
            1 ,             --  State,
            7 ,             --  First argument used for width.
            3 ,             --  Second argument used for precision.
           N ' abcde ' );     --  Third argument supplies the string.
--
 The message text returned is: <<    abc>>.
GO
复制代码


--示例4
RAISERROR  (N ' <<%7.3s>> ' --  Message text.
            10 ,            --  Severity,
            1 ,             --  State,
           N ' abcde ' );     --  First argument supplies the string.
--
 The message text returned is: <<    abc>>.
GO


--示例5    

--A. 从 CATCH 块返回错误消息
以下代码示例显示如何在 TRY 块中使用 RAISERROR 使执行跳至关联的 CATCH 块中。
它还显示如何使用 RAISERROR 返回有关调用 CATCH 块的错误的信息。

复制代码
BEGIN  TRY
    
RAISERROR  ( ' Error raised in TRY block. ' --  Message text.
                 16 --  Severity.
                 1   --  State.
               );
END  TRY
BEGIN  CATCH
    
DECLARE   @ErrorMessage   NVARCHAR ( 4000 );
    
DECLARE   @ErrorSeverity   INT ;
    
DECLARE   @ErrorState   INT ;

    
SELECT  
        
@ErrorMessage   =  ERROR_MESSAGE(),
        
@ErrorSeverity   =  ERROR_SEVERITY(),
        
@ErrorState   =  ERROR_STATE();

    
RAISERROR  ( @ErrorMessage ,   --  Message text.
                @ErrorSeverity --  Severity.
                @ErrorState       --  State.
               );
END  CATCH;
复制代码


--示例6

--B. 在 sys.messages 中创建即席消息
以下示例显示如何引发 sys.messages 目录视图中存储的消息。
该消息通过 sp_addmessage 系统存储过程,以消息号50005添加到 sys.messages 目录视图中。

复制代码
sp_addmessage  @msgnum   =   50005 ,
               
@severity   =   10 ,
               
@msgtext   =  N ' <<%7.3s>> ' ;
GO

RAISERROR  ( 50005 --  Message id.
            10 ,     --  Severity,
            1 ,      --  State,
           N ' abcde ' );  --  First argument supplies the string.
--
 The message text returned is: <<    abc>>.
GO

sp_dropmessage 
@msgnum   =   50005 ;
GO
复制代码


--示例7
--C. 使用局部变量提供消息文本
以下代码示例显示如何使用局部变量为 RAISERROR 语句提供消息文本。
复制代码
sp_addmessage  @msgnum   =   50005 ,
              
@severity   =   10 ,
              
@msgtext   =  N ' <<%7.3s>> ' ;
GO

RAISERROR  ( 50005 --  Message id.
            10 ,     --  Severity,
            1 ,      --  State,
           N ' abcde ' );  --  First argument supplies the string.
--
 The message text returned is: <<    abc>>.
GO

sp_dropmessage 
@msgnum   =   50005 ;
GO
复制代码



参考来源:

http://msdn.microsoft.com/zh-cn/library/ms178592.aspx

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/483588bd-021b-4eae-b4ee-216268003e79.htm


http://chatgpt.dhexx.cn/article/6Jsij6IA.shtml

相关文章

RAISERROR (Transact-SQL)

从msdn上找到的&#xff0c;很详细了生成错误消息并启动会话的错误处理。RAISERROR 可以引用 sys.messages 目录视图中存储的用户定义消息&#xff0c;也可以动态建立消息。该消息作为服务器错误消息返回到调用应用程序&#xff0c;或返回到 TRY…CATCH 构造的关联 CATCH 块。 …

RAISE_APPLICATION_ERROR 用法

可能不是很多人知道 RAISE_APPLICATION_ERROR 的用途是什么&#xff0c;虽然从字面上已经猜到这个函数是干什么用的。平时用来测试的异常处理 我们都是通过dbms_output.put_line来输出异常信息&#xff0c;但是在实际的应用中&#xff0c;需要把异常信息返回给调用的客户端。 …

RAISERROR 的用法(转)

raiserror 的作用&#xff1a; raiserror 是用于抛出一个错误。[ 以下资料来源于sql server 2005的帮助 ] 其语法如下&#xff1a; RAISERROR ( { msg_id | msg_str | local_variable } { ,severity ,state } [ ,argument [ ,...n ] ] ) [ WITH option…

raiserror的用法

描述&#xff1a;raiserror &#xff1a;是用于抛出一个错误 第一个参数&#xff1a;{ msg_id | msg_str | local_variable } msg_id&#xff1a;表示可以是一个sys.messages表中定义的消息代号&#xff1b; 使用 sp_addmessage 存储在 sys.messages 目录视图中的用户定义错误消…

strerror函数

strerror是一个库函数&#xff0c;这个函数的功能就是将errno转换为方便我们理解的字符串信息。我们可以在linux终端命令行中输入“man 3 strerror”来查看这个库函数的详细信息&#xff0c;如下图所示。 从上图我们可以知道&#xff0c;该库函数的原型是&#xff1a;char *st…

SystemError: initialization of _internal failed without raising an exception

运行mmdetection3d时报错&#xff1a; 原因&#xff1a; numba和numpy版本不匹配 解决方法&#xff1a; 降低numpy的版本(由于mmdet3d限制了numba的版本)pip install numpy1.23.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

RAISEERROR

raiserror 的作用 &#xff1a; raiserror 是用于抛出一个错误。[ 以下资料来源于sql server 2005的帮助 ] 其语法如下&#xff1a; RAISERROR ( { msg_id | msg_str | local_variable } { ,severity ,state } [ ,argument [ ,...n…

RAISE_APPLICATION_ERROR用法

&#xfeff;&#xfeff; RAISE_APPLICATION_ERROR用法 Posted on 2008-03-30 11:25 CaizhanshusBlog 阅读( 35132) 评论( 0) 编辑 收藏 可能不是很多人知道 RAISE_APPLICATION_ERROR 的用途是什么&#xff0c;虽然从字面上已经猜到这个函数是干什么用的。平时用来测试的异…

RAISERROR用法

来源http://msdn.microsoft.com/zh-cn/library/ms177497.aspx RAISERROR 用于将与 SQL Server 数据库引擎生成的系统错误或警告消息使用相同格式的消息返回到应用程序中。 RAISERROR 还可以返回&#xff1a; 已通过 sp_addmessage 系统存储过程创建的用户定义的错误消息。这…

SQL Server研习录(23)——RAISERROR()函数

SQL Server研习录&#xff08;23&#xff09;——RAISERROR函数 版权声明一、RAISERROR()函数1、基本语法 版权声明 本文原创作者&#xff1a;清风不渡博客地址&#xff1a;https://blog.csdn.net/WXKKang 一、RAISERROR()函数 概念&#xff1a;生成错误消息并启动会话的错误处…

秒懂SQL SERVERE 数据库中RAISERROR的基本用法

基本用法 raiserror(msg,severity,state)一、msg 错误信息。 二、severity 错误信息的级别&#xff0c;我们可以指定 0 到 18 之间的严重级别。 只有 sysadmin 固定服务器角色成员或具有 ALTER TRACE 权限的用户才能指定 19 到 25 之间的严重级别。若要使用 19 到 25 之间的严…

国产化DSP方案引领VoIP产业全面升级

国内VoIP产业已经是一个发展了20多年的成熟产业链。稳定的客户群体&#xff0c;十几年不变的进口DSP方案&#xff0c;大同小异的产品形态&#xff0c;近几年罕有创新产品诞生。2019年6月1日绅聚科技推出重磅产品–全国产DSP芯片解决方案–A1010&#xff0c;将引领VoIP产业进行全…

A1006

#include <stdio.h>struct pNode{char id[20];int hh,mm,ss; }ans1,ans2, temp;bool great(pNode node1, pNode node2){ //时间node1 大于node2 返回真if (node1.hh ! node2.hh) return node1.hh>node2.hh;if (node1.mm ! node2.mm) return node1.mm>node2.m…

A1010 Radix (25 分)PAT甲级真题(C++)【进制转换】题目详解 测试点分析

Given a pair of positive integers, for example, 6 and 110, can this equation 6 110 be true? The answer is yes, if 6 is a decimal number and 110 is a binary number. Now for any pair of positive integers N1​ and N2​, your task is to find the radix of on…

汇编踩过的坑(error A1010,A2085 ,divide error,A2070,注意事项)

汇编踩过的坑&#xff08;error A1010&#xff0c;A2085 &#xff0c;divide error&#xff0c;A2070&#xff0c;注意事项&#xff09; 最近也是在学汇编语言&#xff0c;上机的时候发现错误很不友好&#xff0c;总是断断续续&#xff0c;上网去查询&#xff0c;又查不到&…

【PAT甲级】A1001-A1050刷题记录

文章目录 A1001 AB Format (20 分) 0.25★(一元多项式加法) A1002 AB for Polynomials (25 分) 0.21(单源最短路Dijkstra边权第二标尺(点权)最短路数目) A1003 Emergency (25 分) 0.28(静态树层次遍历) A1004 Counting Leaves (30 分) 0.35A1005 Spell It Right (20 分) 0.34A1…

绅聚科技推出首款国产化VoIP专用芯片A1010

近20年来我国VoIP产业一直处于蓬勃发展之中&#xff0c;但是最核心的语音融合处理芯片&#xff08;DSP&#xff09;一直是被进口芯片方案所占据&#xff0c;VoIP产品全国产化一直无法实现。2019年6月1日绅聚科技推出了中国首家自主知识产权的中低密度语音融合处理芯片——A1010…

机房收费系统---详细设计说明书

详细设计说明书 1引言 1.1编写目的 说明编写这份详细设计说明书的目的&#xff0c;指出预期的读者。 该文档是在概要设计的基础上&#xff0c;进一步的细化系统结构&#xff0c;展示了软件结构的图表&#xff0c;物理设计&#xff0c;数据结构设计&#xff0c;以及算法设计…

概要设计说明书【校园BBS论坛-附源码】2022-5.5

信息系统分析与设计——系列文章 一、《软件项目开发计划【列文】2022.5.11》 二、《GB&#xff0d;软件需求说明书【列文】2022-5.6》 三、《需求分析文档——适用范围&#xff1a;产品规划经理进行需求分析》 四、《开发进度月报【列文】2022.5.11》 五、《可行性研究报告【列…

数据库课程设计 论坛系统—— 系统详细设计说明书

马马虎虎记录下2021Fall 的数据库课程设计——论坛系统 基于django开发&#xff0c;源码上传到github啦:) &#x1f517; B612Forum 不能翻墙的戳这里:) csdn资源下载 文章目录 1. 文档介绍1.1. 编写目的1.2. 文档范围1.3. 读者对象 2. 数据库概念结构设计2.1 系统 ER 图2.2 系…