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