多语言展示
当前在线:1170今日阅读:103今日分享:49

MSSQL作业使用:[1]建带有错误信息的存储过程

MSSQL创建作业时,能设置作业失败的重试情况。为后续经验做铺垫,先来创建一个带有错误信息的作业。
工具/原料

MSSQL2000,2005,2008,2012等以及后续版本

方法/步骤
1

创建一个测试库表FLAG

3

写一个测试存储过程usp_test用到RAISERROR系统方法:生成错误消息并启动会话的错误处理。 RAISERROR 可以引用 sys.messages 目录视图中存储的用户定义消息,也可以动态建立消息。 该消息作为服务器错误消息返回到调用应用程序,或返回到 TRY…CATCH 构造的关联 CATCH 块。

4

部署存储过程后,执行存储过程得到错误信息。

5

将测试数据改为非0,然后再执行存储过程。

RAISERROR方法介绍(来自MSDN)
1

RAISERROR语法

2

msg_id是使用 sp_addmessage 在 sys.messages 目录视图中存储的用户定义的错误消息号。 用户定义的错误消息的错误号应大于 50000。 当未指定 msg_id 时,RAISERROR 将引发一个错误号为 50000 的错误消息。

3

msg_str用户定义消息,格式与 C 标准库中的 printf 函数类似。 该错误消息最长可以有 2,047 个字符。 如果该消息包含的字符数等于或超过 2,048 个,则只能显示前 2,044 个并添加一个省略号以表示该消息已被截断。 请注意,由于内部存储行为的缘故,代替参数使用的字符数比输出所显示的字符数要多。 例如,赋值为 2 的代替参数 %d 实际在消息字符串中生成一个字符,但是还会在内部占用另外三个存储字符串。 此存储要求减少了可用于消息输出的字符数。当指定 msg_str 时,RAISERROR 将引发一个错误号为 50000 的错误消息。

4

@ local_variable是一个可以为任何有效字符数据类型的变量,其中包含的字符串的格式化方式与 msg_str 相同。 @ local_variable 必须为 char 或 varchar,或者能够隐式转换为这些数据类型。

5

severity用户定义的与该消息关联的严重级别。 当使用 msg_id 引发使用 sp_addmessage 创建的用户定义消息时,RAISERROR 上指定的严重性将覆盖 sp_addmessage 中指定的严重性。任何用户都可以指定 0 到 18 之间的严重级别。 只有 sysadmin 固定服务器角色成员或具有 ALTER TRACE 权限的用户才能指定 19 到 25 之间的严重级别。 若要使用 19 到 25 之间的严重级别,必须选择 WITH LOG 选项。 将小于 0 的严重级别解释为 0。 将大于 25 的严重级别解释为 25。注意:20 到 25 之间的严重级别被认为是致命的。 如果遇到致命的严重级别,客户端连接将在收到消息后终止,并将错误记录到错误日志和应用程序日志。

6

state0 到 255 之间的整数。 负值或大于 255 的值将生成错误。 可以指定“-1”来返回与以下示例中所示的 severity 定义中的错误关联的值。如果在多个位置引发相同的用户定义错误,则针对每个位置使用唯一的状态号有助于找到引发错误的代码段。

7

argument用于代替 msg_str 或对应于 msg_id 的消息中的定义的变量的参数。 可以有 0 个或更多个替换参数,但替换参数的总数不能超过 20。 每个替换参数可以是本地变量或以下任何数据类型:tinyint、smallint、int、char、varchar、nchar、nvarchar、binary 或 varbinary。 不支持其他数据类型。

推荐信息