在本文中,将介绍如何使用 RAISERROR 命令调用错误消息。
RAISERROR 命令用于从 sys.message 系统目录视图或者在运行时从字符串生成的错误消息中生成错误消息。
RAISERROR 命令具有三个主要组成部分:错误编号、严重性和状态。 根据 msdn RAISERROR 用于对 Transact-SQL 代码进行故障排除、检查数据值、返回包含变量文本的消息、导致执行从 TRY 块跳转到关联的 CATCH 块、从 CATCH 块返回错误信息 到调用批处理或者应用程序。
语法
RAISERROR({msg_id|msg_str|@local_variable} {,severity ,state} [,argument[,...n]]) [WITH option[,...n]]
在上面的语法中,
第一个参数包括msg_id,msg_str和@local_variable,我们可以选择三个选项之一。
MSG_ID指定由用户提供的错误ID,其可以在50,001和2,147,483,647之间。
MSG_STR是用户定义的消息,其限制为2047个字符。
@local_variable是一个字符串变量,用于传递此消息字符串。
第二个参数是严重性和状态。
严重性定义了邮件的严重性级别,可以在1和25之间。
状态是用户定义的数字(1到25),用于识别失败代码的位置。
argument[,...n]指定错误消息中使用的替换参数。
WITH option[,...n]包含三个选项: LOG,nowait和setError。
日志写入错误,Nowait将消息发送给客户端,setError设置@@错误。
使用raisError生成错误消息
在此示例中,我创建存储过程以在Student1Details表中插入记录。
在将记录插入Student1Details表时,将首先评估分支以查看它是"en"分支。
如果不是一个en branch,则不会插入录制并调用使用raisError的错误。
假设我们有下表
student1details表
现在创建存储过程以调用错误消息。
CREATE PROCEDURE sp_insert @ID int, @Name varchar(50), @Branch varchar(5), @Location varchar(15) AS IF @Branch = 'EN' BEGIN INSERT INTO [Student1Details] VALUES (@ID, @Name,@Branch,@Location) END ELSE BEGIN RAISERROR(' No new studentdetails can be added for %s Branch', 16,1,@Branch) END
执行sp_insert存储过程。
exec sp_insert
此示例使用 RAISERROR 命令在 IF 条件中定义的条件不满足时生成错误。 在上面的存储过程中,检查 Branch 的值。 如果它的值不是 EN Branch,则不会插入记录。
IF @Branch = 'EN' BEGIN INSERT INTO [Student1Details] VALUES (@ID, @Name,@Branch,@Location) END Now IF condition does not satisfied because Branch was "EI", the ELSE clause invokes the RAISERROR command. ELSE BEGIN RAISERROR(' No new studentdetails can be added for %s Branch', 16,1,@Branch) END