在存储过程中进程会处理一些逻辑性的错误,如:将RMB转换为USD时,没有查询到想要的汇率 这个时候最好在存储过程中抛个异常,方便自己查找错误信息。。。

其语法如下:

  1. RAISERROR ( { msg_id | msg_str | @local_variable }        
  2.             { ,severity ,state }        
  3.             [ ,argument [ ,...] ] 
  4.           )       
  5.    [ WITH option [ ,...] ]
 

简要说明一下:

  
第一个参数:{ 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
  1. DECLARE @raiseErrorCode nvarchar(50)
  2. SET @raiseErrorCode = CONVERT(nvarchar(50), YOUR UNIQUEIDENTIFIER KEY)
  3. RAISERROR('%s INVALID ID. There is no record in table',16,1, @raiseErrorCode)
--示例2
  1.  
  2. RAISERROR (
  3.              N'This is message %s %d.', -- Message text,
  4.              10,                        -- Severity,
  5.              1,                         -- State,
  6.              N'number',                 -- First argument.
  7.              5                          -- Second argument.
  8.           ); 
  9. -- The message text returned is: This is message number 5.
  10. GO
--示例3
  1.  
  2. RAISERROR (N'<<%*.*s>>', -- Message text.
  3.            10,           -- Severity,
  4.            1,            -- State,
  5.            7,            -- First argument used for width.
  6.            3,            -- Second argument used for precision.
  7.            N'abcde');    -- Third argument supplies the string.
  8. -- The message text returned is: <<    abc>>.
  9. GO
--示例4
  1. RAISERROR (N'<<%7.3s>>', -- Message text.
  2.            10,           -- Severity,
  3.            1,            -- State,
  4.            N'abcde');    -- First argument supplies the string.
  5. -- The message text returned is: <<    abc>>.
  6. GO
--示例5    

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

  1.  
  2. BEGIN TRY
  3.     RAISERROR ('Error raised in TRY block.', -- Message text.
  4.                 16, -- Severity.
  5.                 1 -- State.
  6.                );
  7. END TRY
  8. BEGIN CATCH
  9.     DECLARE @ErrorMessage NVARCHAR(4000);
  10.     DECLARE @ErrorSeverity INT;
  11.     DECLARE @ErrorState INT;
  12.  
  13.     SELECT 
  14.         @ErrorMessage = ERROR_MESSAGE(),
  15.         @ErrorSeverity = ERROR_SEVERITY(),
  16.         @ErrorState = ERROR_STATE();
  17.  
  18.     RAISERROR (@ErrorMessage,  -- Message text.
  19.                @ErrorSeverity, -- Severity.
  20.                @ErrorState     -- State.
  21.                );
  22. END CATCH;
--示例6

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

  1.  
  2. sp_addmessage @msgnum = 50005,
  3.                @severity = 10,
  4.                @msgtext = N'<<%7.3s>>';
  5. GO
  6.  
  7. RAISERROR (50005, -- Message id.
  8.            10,    -- Severity,
  9.            1,     -- State,
  10.            N'abcde'); -- First argument supplies the string.
  11. -- The message text returned is: <<    abc>>.
  12. GO
  13.  
  14. sp_dropmessage @msgnum = 50005;
  15. GO
--示例7
--C. 使用局部变量提供消息文本
以下代码示例显示如何使用局部变量为 RAISERROR 语句提供消息文本。
  1.  
  2. sp_addmessage @msgnum = 50005,
  3.               @severity = 10,
  4.               @msgtext = N'<<%7.3s>>';
  5. GO
  6.  
  7. RAISERROR (50005, -- Message id.
  8.            10,    -- Severity,
  9.            1,     -- State,
  10.            N'abcde'); -- First argument supplies the string.
  11. -- The message text returned is: <<    abc>>.
  12. GO
  13.  
  14. sp_dropmessage @msgnum = 50005;
  15. GO

SQL Server 中 RAISERROR 的用法(转)的更多相关文章

  1. SQL Server 中 RAISERROR 的用法

    From : http://www.cnblogs.com/xugang/archive/2011/04/09/2010216.html   raiserror  是由单词 raise error 组 ...

  2. sql server中raiserror的用法(动态参数传值)

    1.raiserrror定义: 返回用户定义的错误信息并设系统标志,记录发生错误.通过使用 RAISERROR 语句,客户端可以从 sysmessages 表中检索条目, 或者使用用户指定的严重度和状 ...

  3. SQL SERVER 中 GO 的用法2

    具体不废话了,请看下文详解. 1 2 3 4 5 6 7 8 9 10 use db_CSharp go  select *,  备注=case  when Grade>=90 then '成绩 ...

  4. SQL Server中@@ROWCOUNT的用法

    SQL Server中@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int 整型. 如果行数大于 20 亿,则需要使用 ROWCOUNT_BIG. @@ROWCOUNT和@@ERROR变 ...

  5. SQL SERVER 中PatIndex的用法个人理解

    一般用法:PatIndex('%AAA%',‘BBBBBBBB’) 上句的意思是查找AAA在BBBBBBBB中的位置,从1开始计算,如果没有的话则返回0 其中%AAA%的用法和 SQL语句中like的 ...

  6. 【转】sql server2005中raiserror的用法

    raiserror  是由单词 raise error 组成     raise  增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ...

  7. SQL Server 中 GO 的用法(转)

    本科里学了那么多年SQL Server一直看到书上各种SQL语句中间夹杂着那么几个看似毫无意义的GO,看着就让人莫名,问老师,老师一般只会告诉你,不要理他,这个东西没用的.但是个性纠结并且有轻微强迫症 ...

  8. sql server 中raiserror的使用

    server数据库中raiserror的作用就和asp.net中的throw new Exception一样,用于抛出一个异常或错误.这个错误可以被程序捕捉到. raiserror('错误的描述',错 ...

  9. SQL SERVER 中 GO 的用法

    用信号通知 Microsoft® SQL Server™ 实用工具一批 Transact-SQL 语句的结束.GO 不是 Transact-SQL 语句:而是可为 osql 和 isql 实用工具及 ...

随机推荐

  1. 以Android环境为例的多线程学习笔记(二)-----------------锁和条件机制

    现在的绝大多数应用程序都是多线程的程序,而当有两个或两个以上的线程需要对同一数据进行存取时,就会出现条件竞争,也即 是这几个线程中都会有一段修改该数据状态的代码.但是如果这些线程的运行顺序推行不当的话 ...

  2. 尼康D5100使用设置及技巧,同样也适用尼康D5200

    尼康D5100使用设置及技巧,同样也适用尼康D5200,希望对新手能有点帮助. 一.设置 1.优化校准:可以在menu菜单中找到它,一般使用"标准"就可以,建议将"标准& ...

  3. software testing homework2

    一.Checkstyle安装及使用 1.checkstyle插件包:http://sourceforge.net/projects/eclipse-cs/ checkstyle.xml配置文件:htt ...

  4. 如何将mongodb bson文件转成json文件

    使用mongodb自带的命令 bsondump collection.bson > collection.json

  5. Snort

    https://www.snort.org/ http://blog.csdn.net/htttw/article/details/7521053 http://www.ibm.com/develop ...

  6. C++中类成员函数作为回调函数

    注:与tr1::function对象结合使用,能获得更好的效果,详情见http://blog.csdn.net/this_capslock/article/details/38564719 回调函数是 ...

  7. Linux的几个概念,常用命令学习

    Linux的几个概念,常用命令学习---------------------------------设备名装载点// 通过装载点访问设备-------------------------------- ...

  8. 利用KVC实现无需协议的委托模式

    在<精通iOS开发>一书中看到的技巧.假设BIDTaskListController是一个列表,点击列表上的一项将会导航到BIDTaskDetailController,在BIDTaskD ...

  9. 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告

    杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...

  10. ubuntu16.04安装kde桌面出错: /var/cache/apt/archives/kde-config-telepathy-accounts_4%3a15.12.3-0ubuntu1_amd64.deb

    出错提示: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 kubuntu-desktop 已经是最新版 (1.338). 您可能需要运行“apt-get - ...