1

在存储过程中,我试图测试参数是否为空或小于 1,如果是,则使用友好消息引发错误以及参数的值。

这是我的代码:

IF @ID IS NULL OR @ID <= 0
BEGIN
    RAISERROR 27001 'ID is ?????. ID cannot be null or less then zero.'
    RETURN 27001
END

我想回来的是:

“ID 为 0。ID 不能为空或小于零。” “ID 为空。ID 不能为空或小于零。”

我尝试构建一个 varchar 并引发如下错误:

RAISERROR 27001 @message

但这会产生错误“传递给 RAISERROR 的消息编号 27001,在 sysmessages 目录中不存在。”

4

2 回答 2

2

问题是这样的:您需要通过调用 sp_addmessage 将自定义错误 # 添加到数据库中:

sp_addmessage 27001, "ID is %1. ID cannot be null or less than zero."

然后你可以像上面那样调用 RAISERROR,或者像这样(如果你想使用你在 sp_addmessage 中定义的消息字符串):

RAISERROR 27001, @ID

编辑:(解决评论)

首先,如果您愿意,只需使用位置参数注册 27001 作为消息:

sp_addmessage 27001, "%1"

其次,您不会强制显示您使用 sp_addmessage 注册的默认消息;例如,无论默认消息是什么,这都应该显示单独的消息:

RAISERROR 27001 @message
于 2009-06-30T21:25:12.063 回答
2

这有效,尽管 NULL 的 @ID 值写出为空字符串。

IF @ID IS NULL OR @ID <= 0
BEGIN

    DECLARE @msg varchar(250)
    SELECT @msg = 'ID is ' +  Convert(varchar(15), @ID) + '. Value cannot be null or less then zero'

    RAISERROR 27001 @msg
    RETURN 27001
END
于 2009-07-08T16:25:37.160 回答