MSSQL存储过程中返回自定义错误消息的方法


当存储过程中运行结果,不是用户所希望的结果时
(例:
影响的行数不是用户所需要的,
得到的数值不是用户想要的
),此时我们通过调用系统函数返回错误信息,
使存储过程调用者收到错误信息,下文将讲述如何在存储过程中返回错误的方法



mssql raiserror函数简介

raiserror函数主要是使DB服务器返回错误信息。

raiserror 函数语法:
raiserror(参数1,参数2, 参数3,[参数4 …]) [with 参数5 ]
参数1:
从sys.messages中选择一个消息号

用户自定义一个小于2047个字符的nvarchar文字

放入一个本地变量代替nvarchar字符
参数2:
用户定义消息级别
0~10 消息级别,则不会进入catch
11~19消息级别,则会进入catch
大于等于20 ,则直接终止数据库连接
参数3(状态):
输入1~127之间的任意整数
输入0 或者大于127 则会生成错误
参数4:
可以输入一个或多个参数替换参数1重的字符
参数5:
输入 log, nowait,seterror
log:在错误日志和应用程序日志中记录错误;
nowait:将消息立即发送给客户端;
seterror:将 @@ERROR 、ERROR_NUMBER 值设置为 参数1 或 50000;


例1:
DECLARE @errInfo nvarchar(50)
SET     @errInfo ='键产生错误信息';
RAISERROR('%s . 这是一个错误信息',16,1, @errInfo)
例2:
RAISERROR (
             N'这是一个错误消息 %s %d 异常.',  -- 自定义消息体,
             8,                        -- 消息级别,
             1,                         -- 参数3,
             N'数值',                    -- 消息体中第一个参数替换.
             5                          -- 消息体中第二个参数替换.
          ); 
例3:

RAISERROR (N'%d %d %s', -- 自定义消息体.
           9,           -- 消息级别,
           3,            -- 级别,
           10,            -- 消息体中第一个参数替换
           20,            -- 消息体中第二个参数替换
           N'string');    -- 消息体中第三个参数替换


例:
存储过程中返回错误信息

  create proc pr_test 
  @a varchar(10)
   as 
   begin
    if @a ='showInfo'
    begin
     raiserror('无效参数:%s',12,1,@a)
     return;
    end 
    select '执行成功'
   end
  go
  exec pr_test 'showInfo'