2009-06-30 95 views
1

在存储过程中,我试图测试参数是否为null或小于1,如果是,则用友好消息和参数值引发错误。在SYBASE ASE 12.5中格式化RAISERROR消息

这里是我的代码:

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和提高这样的错误:“消息编号27001,传递给RAISERROR,在sysmessages目录不存在”

RAISERROR 27001 @message 

但产生错误

回答

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 
2

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

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

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

RAISERROR 27001, @ID 

编辑:(寻址评论)

首先,如果你愿意举ST与位置参数的消息登录27001:

sp_addmessage 27001, "%1" 

其次,你不会被迫以显示您已经使用的sp_addmessage注册默认的消息;例如,这应该不管默认消息是什么,以显示一个单独的消息:

RAISERROR 27001 @message 
+0

这是行得通的,但我们在我们所有的过程中重复使用了范围27000 - 27050。换句话说,proc a中的27001在概率b中不一定是27001。所以sp_addmessage不是我们的选择。 – JamesWampler 2009-07-06 22:56:46

+0

实际上,sp_addmessage是一个选项(请参阅编辑部分以了解如何),并且据我所知,如果要提升任何自定义错误编号,则必须执行此操作。 – hythlodayr 2009-07-07 18:13:52