zoukankan      html  css  js  c++  java
  • RAISERROR errornumber [ formatstring ] [, arglist ]

    转载至:http://hi.baidu.com/software_2008/blog/item/7d768731dde7ee11eac4af16.html

    系统预定义错误代码

    SQL Server 有3831个预定义错误代码,由master.dbo.sysmessages表维护。每一个错误代码都有相应的级别和描述。
    错误定义的级别从0到25。20以上的错误代表重大错误,通常意味着该错误会导致存储进程立刻终止,并且所有的客户连接都要重新初始化。
    非关键性错误只是禁止掉当前运行的程序行,并继续执行。

    判断错误是否发生和得到错误描述信息的方法:

    IF @@ERROR = 0

    begin

         SELECT @ERRORMESSAGETXT = description FROM master.dbo.sysmessages WHERE error = @@ERROR

    end

    二 raiserror语法
    msg_id 定制消息的错误代码。. RAISERROR 接受任何大于13000的数字, 但是定制信息msg_id要大于等于50000。
    msg_str 定制信息的文本。
    severity 定制信息的级别。从 0 to 25, 19-25 是重大错误代码。
    state 呈现导致错误的状态,不在SQL内部使用。
    argument 定义在错误信息中的可以替换的值。
    WITH…

    有三个选项: 
    ·     WITH LOG 纪录错误。只能用于级别高于19的错误。
    ·     WITH NOWAIT 将错误立刻发送到客户端
    ·     WITH SETERROR sets @@ERROR to the value specified by msg_id, regardless of severity level.

    语法
    RAISERROR ( { msg_id ¦ msg_str } { , severity , state }
    [ , argument [ ,...n ] ] )
    [ WITH option [ ,...n ] ]

    参数
    msg_id

    存储于 sysmessages 表中的用户定义的错误信息。用户定义错误信息的错误号应大于 50,000。由特殊消息产生的错误是第 50,000 号。

    msg_str

    是一条特殊消息,其格式与 C 语言中使用的 PRINTF 格式样式相似。此错误信息最多可包含 400 个字符。如果该信息包含的字符超过 400 个,
    则只能显示前 397 个并将添加一个省略号以表示该信息已被截断。所有特定消息的标准消息 ID 是 14,000。

    msg_str 支持下面的格式:

    % [[flag] [width] [precision] [{h ¦ l}]] type

    可在 msg_str 中使用的参数包括:

    flag

    用于确定用户定义的错误信息的间距和对齐的代码。

    {h | l} type

    与字符类型 d、i、o、x、X 或 u 一起使用,用于创建 short int (h) 或 long int (l) 类型的值。

    字符类型表示
    d 或 I 带符号的整数
    o 不带符号的八进制数
    p 指针型
    s String
    u 不带符号的整数
    x 或 X 不带符号的十六进制数

    说明   不支持 float、双精度和单精度字符类型。

    severity

    用户定义的与消息关联的严重级别。用户可以使用从 0 到 18 之间的严重级别。19 到 25 之间的严重级别只能由 sysadmin 固定服务器角色成员使用。
    若要使用 19 到 25 之间的严重级别,必须选择 WITH LOG 选项。

    注意 20 到 25 之间的严重级别被认为是致命的。如果遇到致命的严重级别,客户端连接将在收到消息后终止,并将错误记入错误日志和应用程序日志。


    state

    从 1 到 127 的任意整数,表示有关错误调用状态的信息。state 的负值默认为 1。

    argument

    是用于取代在 msg_str 中定义的变量或取代对应于 msg_id 的消息的参数。可以有 0 或更多的替代参数;然而,替代参数的总数不能超过 20 个。
    每个替代参数可以是局部变量或这些任意数据类型:int1、int2、int4、char、varchar、binary 或 varbinary。不支持其它数据类型。

    option

    错误的自定义选项。option 可以是以下值之一:

    值 描述 
    LOG 将错误记入服务器错误日志和应用程序日志。记入服务器错误日志的错误目前被限定为最多 440 字节。 
    NOWAIT 将消息立即发送给客户端。 
    SETERROR 将 @@ERROR 的值设置为 msg_id 或 50000,与严重级别无关。

    三 用户自定义错误处理

    IF (@role_type_id IS NULL)
       BEGIN
        RAISERROR ('Parameter ''role_type_id'' can not be null.' , 16, 1) WITH NOWAIT
        RETURN 1
       END

    四 定制错误信息

    当然,大多数情况下,错误信息会使用多次,一遍一遍的输入相同的信息显然不理智。
    使用sp_addmessage 存储过程将定制错误信息添加到sysmessages 表里。以后,在使用RAISERROR 时候就可以引用新的信息ID号。

    定制错误信息的标识号必须大于等于50000,信息本身的长度不能超过255个字符。
    下面是例子,创建新的信息,赋予识别号55555,级别为10,调用方式如下:sp_addmessage 55555, 10, 'New error message.' 
    你可以在存储进程中增加提交新的错误:RAISERROR 55555, 10

    说明

    此语句用于发出错误信号和向客户端发送消息。

    语法

    RAISERROR error-number [ format-string ] [, arg-list ]

    参数


    error-number    error-number 是大于 17000 的五位整数。错误号存储在全局变量 @@error 中。 
    format-string     如果未提供 format-string 或者其为空,则使用错误号在系统表中查找错误消息。Adaptive Server Enterprise 从 SYSMESSAGES 表中获取的消息范围为 17000-19999。在 Adaptive Server Anywhere 中,此表为空视图,因此这个范围内的错误消息应该提供格式字符串。编号为 20000 或更大的错误消息从 SYS.SYSUSERMESSAGES 表中获取。 
    在 Adaptive Server Anywhere 中,format-string 的长度最多可达 255 字节。 
    Adaptive Server Enterprise 中的 RAISERROR 语句支持的扩展值在 Adaptive Server Anywhere 中不受支持。 
    对于可选参数列表中的参数,格式字符串可以包含占位符。这些占位符的形式为 %nn!,其中 nn 是介于 1 到 20 之间的整数。 
    中间 RAISERROR 状态和代码信息在过程终止后会丢失。如果在返回时伴随 RAISERROR 发生了错误,则返回错误信息,而 RAISERROR 信息将丢失。应用程序可以通过在不同的执行点检查 @@error 全局变量,查询中间 RAISERROR 状态。

    用法


    RAISERROR 语句允许发出用户定义的错误并向客户端发送消息。

    权限


    无。

    副作用


    无。

    另请参见
    标准和兼容性
    • SQL/92     Transact-SQL 扩展。

    • SQL/99     Transact-SQL 扩展。

    • Sybase     受 Adaptive Server Enterprise 支持。

    示例


    下面的语句引发错误 23000(该错误在用户定义的错误范围内)并向客户端发送消息。请注意在 error-number 和 format-string 参数之间有一个逗号。逗号后的第一项被解释为参数列表中的第一项。

    RAISERROR 23000 'Invalid entry for this column: %1!', @val


    下一个示例使用 RAISERROR 禁止连接。

    create procedure DBA.login_check()

    begin

          // Allow a maximum of 3 concurrentconnections

          if( db_property('ConnCount') > 3 ) then

         raiserror 28000

            'User %1! is not allowed to connect -- thereare already %2! users logged on',

            current user,

            cast(db_property('ConnCount') as int)-1;

          else

         call sp_login_environment;

          end if;

    end

    go

    grant execute on DBA.login_check to PUBLIC

    go

    set optionPUBLIC.Login_procedure='DBA.login_check'

    go

  • 相关阅读:
    GIL
    CRM2Stark组件
    Django图书管理系统(单表操作)
    Python(ATM机low版)
    Python(9-18天总结)
    Python(1-8天总结)
    Python习题(分页显示)
    Python文本操作2
    Python递归二分法
    Python文本操作
  • 原文地址:https://www.cnblogs.com/jshchg/p/1900028.html
Copyright © 2011-2022 走看看