SQL Server 中 RAISERROR 的用法详细介绍

SQL Server 中 RAISERROR 的用法

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • SQL Server 2008图文安装教程第1/2页

    SQL Server 2008我们也能从中体验到很多新的特性,但是对于SQL Server 2008安装,还是用图来说话比较好.本文将从SQL Server 2008安装开始讲起. 本来这篇是打算玩玩服务器功能中的第一个:adrms的,没想到装了几次都安装成功,但是有错误,后来没招了,打算将rms的数据库放到sql上来折腾折腾,所以为了不让大家觉得突兀,所以本篇SQL Server 2008安装,SQL Server 2008在企业中也是非常重要的应用,各种财务系统,erp系统,oa系统等都会用

  • SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法

    SQL Server 2008"阻止保存要求重新创建表的更改"的错误的解决方案是本文我们主要要介绍的内容,情况是这样的:我们在用SQL Server 2008 建完表后,插入或修改任意列时,提示:当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改. 如果强行更改会出现以下提示:不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了"阻止保存要求重新创建表的更改&qu

  • Microsoft SQL Server 2012 数据库安装图解教程

    我们下载地址:http://www.jb51.net/softs/79861.html 官网下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=29066 1. 根据微软的下载提示,64位的Windows7操作系统,只需下载列表的CHSx64SQLFULL_x64_CHS_Core.box.CHSx64SQLFULL_x64_CHS_Intall.exe和CHSx64SQLFULL_x64_CHS_Lang.box三个安装包即

  • SQL Server 2008登录错误:无法连接到(local)解决方法

    在一些朋友安装完SQL Server 2008之后大多会遇到连接出错的问题.特别对于我们这样的新手而言简直郁闷的要死,好不容易装玩了又出现了问题.此篇文章意在解决安装步骤没有问题,但安装后无法登录的问题. 在解决问题之前请朋友们打开服务窗口,看"SQL Server"主服务是否打开,如下图. 若服务已经打开还是用"SQL Server 身份验证"和"Windows 身份验证"都无法登录请看下面的步骤. 往往这时,服务器类型我们选择了"数

  • Sql Server 2008完全卸载方法(其他版本类似)第1/2页

    一.    SQL2008卸载. 1.从控制面板卸载 1)点击计算机右下角"开始",点击"控制面板" 2)点击"卸载程序". 3)在程序列表中找到"Microsoft SQL Server 2008",右击 选"卸载"(或双击). 4)点击"删除" 5)如上图,则重启计算机. 按上面的步骤,重新卸载. 重启后,重新卸载,如下图. 6)点击确定. 7)下一步 8)全选.点击"下一

  • 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器

    今早开机发现,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆数据库?提示以下错误: "在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)" 在网上看到他人说使用将服务器(local

  • MySQL server has gone away 问题的解决方法

    mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了. 造成这样的原因一般是sql操作的时间过长,或者是传送的数据太大(例如使用insert ... values的语句过长, 这种情况可以通过修改max_allowed_packed的配置参数来避免,也可以在程序中将数据分批插入). 产生这个问题的原因有很多,总结下网上的分析: 原因一. MySQL 服务宕了 判断是否属于这个

  • SQL Server数据库入门学习总结

    一图胜"十"言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数据库有了一些认识. 数据库基本是由表,关系,操作组成:对于初学者首先要学的: 1.数据库是如何存储数据的 表,约束,触发器 2.数据库是如何操作数据的 insert,update,delete T-sql 函数 存储过程 触发器 3.数据库是如何显示数据的 select SQLServer数据库学习总结 1.SQL基础 SQL Server2000安装.配置,服务器启动.停止,企业管理器.查询分

  • SQL Server自定义异常raiserror使用示例

    在使用SQL Server存储过程或者触发器时,通常会使用自定义异常来处理一些特殊逻辑.例如游标的销毁,事务的回滚.接下来将会详细的介绍SQL Server自定义异常的使用. 使用"raiserror"来抛出自定义异常.如下代码:在存储过程中,抛出自定义异常,然后在catch块中捕获自定义异常. IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='my_sp_test' AND TYPE='P') BEGIN DROP PROCEDURE m

  • SQL Server 2012 安装图解教程(附sql2012下载地址)

    在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统.CPU是2.1GHz赛扬双核T3500,内存2.93GB. sql2012下载 http://www.jb51.net/softs/79861.html 安装SQL Server 2012的软硬件环境参数 根据微软的下载提示,32位的Windows 7操作系统,只需下载列表最下面的CHSx86SQLFULL_x86_CHS_Core.box. CHSx86SQLFULL_

随机推荐