SQL Server2000存储过程中raiserror的使用

转载 2007年09月25日 09:46:00
系统预定义错误代码

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()函数

  • 2009年09月03日 21:02
  • 114KB
  • 下载

C# catch 块中可以俘获 SQL Server 抛出的自定义异常(RAISERROR)(轉)

     對於數據庫這塊我基本上算是個文盲。今天看到別人的文章感覺還可以,雖對其中的原理不是很懂,但先學習一下。 原文如下:(代碼部分被自己的代碼取代) 在 SQL Server 的存储过程中根...
  • XinChiMaker
  • XinChiMaker
  • 2010-12-27 07:46:00
  • 4768

SQL Server 存储过程中使用raiserror抛出异常

转自(SQL Server 存储过程中使用raiserror抛出异常 )一 系统预定义错误代码SQL Server 有3831个预定义错误代码,由master.dbo.sysmessages 表维...
  • tastelife
  • tastelife
  • 2010-07-31 11:40:00
  • 11282

SQL SERVER 2000 嵌套 存储过程 事务 回滚

/*当一段大的SQL语句中调用了多个存储过程,被调用的存储过程中又调用了多个存储过程,如此经过多次嵌套调用后,当遇到如重复主键、或是不满足业务逻辑时需要回滚整个事务,则可以使用下面的模式进行处理。也可...
  • slindesen
  • slindesen
  • 2011-03-11 10:47:00
  • 3352

SQL 中 RAISERROR 的用法

raiserror  是由单词 raise error 组成      raise  增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误。[ 以下资...
  • mao834099514
  • mao834099514
  • 2016-08-22 15:32:12
  • 1046

sql server数据库中raiserror函数的用法1

sql server数据库中raiserror的作用就和asp.net中的throw new Exception一样,用于抛出一个异常或错误。这个错误可以被程序捕捉到。 raiserror的常用格式如...
  • qq_25627143
  • qq_25627143
  • 2016-03-06 18:52:53
  • 2555

SQL Server存储过程中raiserror的使用

一 系统预定义错误代码 SQL Server 有3831个预定义错误代码,由master.dbo.sysmessages表维护。每一个错误代码都有相应的级别和描述。错误定义的级别从0到25。20以上的...
  • tianlianchao1982
  • tianlianchao1982
  • 2010-05-04 14:12:00
  • 435

SQL Server自定义异常的使用raiserror

转自:http://www.cnblogs.com/renyb/archive/2012/05/23/2515139.html 在使用SQL Server存储过程或者触发器时,通常会使用自定...
  • chelen_jak
  • chelen_jak
  • 2014-05-30 19:09:51
  • 2249

sqlserver2000中使用存储过程创建表

1. 创建存储过程CREATE   procedure   LP_CreateTab       @Tab_NameInfo     varchar(20),     @Tab_NameAchv   ...
  • yuvmen
  • yuvmen
  • 2007-12-09 11:43:00
  • 2192

SQL server raiserror的用法

sql server中的 raiserror,是由单词 raise error 组成。(raise  增加; 提高; 提升)   raiserror 的作用: raiserror 是用于抛出...
  • myflysun
  • myflysun
  • 2013-12-19 16:55:11
  • 1568
收藏助手
不良信息举报
您举报文章:SQL Server2000存储过程中raiserror的使用
举报原因:
原因补充:

(最多只允许输入30个字)