在SYBASE ASE 12.5中格式化RAISERROR消息

时间:2009-06-30 19:55:07

标签: sql stored-procedures sybase-ase raiserror

在存储过程中,我试图测试参数是否为null或小于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不能为null或小于零。” 要么 “ID为空.ID不能为null或小于零。”

我已经尝试构建varchar并像这样引发错误:

RAISERROR 27001 @message

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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