【问题标题】:Formatting RAISERROR messages in SYBASE ASE 12.5在 SYBASE ASE 12.5 中格式化 RAISERROR 消息
【发布时间】:2009-06-30 19:55:06
【问题描述】:

在存储过程中,我尝试测试参数是否为空或小于 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 目录中不存在。”

【问题讨论】:

    标签: sql stored-procedures sap-ase raiserror


    【解决方案1】:

    问题是这样的:您需要通过调用 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
    

    【讨论】:

    • 这确实有效,但我们在所有 procs 中重用了 27000 - 27050 的范围。换句话说,proc a 中的 27001 不一定是 prob b 中的 27001。所以 sp_addmessage 不是我们的选择。
    • 实际上,sp_addmessage 是一个选项(请参阅已编辑的部分以了解如何操作),据我所知,如果您想提出任何自定义错误编号,它是必须的。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      相关资源
      最近更新 更多