存储过程中自己定义的错误信息用 raiserror 显示时可否定制﹖(就是不显示前面一长串系统自动加上的信息)。另外如果只是想弹出一个提示说明已经成功执行﹐该用什幺函数呢﹖

解决方案 »

  1.   

    select case 
      when @@error =1 then '错误1'
      when @@error =2 then '错误2'
      when @@error =3 then '错误3'
    end这样可以吗?
      

  2.   

    定义自定义的消息
    此示例将自定义的消息添加到 sysmessages。 USE master
    EXEC sp_addmessage 50001, 16, 
       N'Percentage expects a value between 20 and 100. 
       Please reexecute with a more appropriate value.'
      

  3.   

    golden24kcn(不甜)﹑yoki(小马哥)﹕
        谢谢你们的回答。
        由于我是刚开始在SQL里面编程﹐所以不太了解你们的意思﹐
        when @@error =1 then '错误1'
        此处@@error = 1是否小马哥下面所说的将错误信息加入sysmessages中并将错误号设为1﹐但是后面的 then ‘错误1’是如何弹出的呢﹐我现在用
        raiserror @TipMsg,16,1  系统弹出的窗口中总会附加一些多余的字符﹐如错误号呀什幺的一长串﹐我该怎幺把这些附加的字符串去掉﹐让用户只看到我定义的字符呢(如:单号重复﹐请修改)
      

  4.   

    我的意思是,如果你自定义了错误A,它的错误号为123那写成declare @ErrorInfoif @@error=123 then 
      @ErrorInfo ='我的错误对象'
    else
      @ErrorInfo ='系统的错误对象'
    select @errorinfogo你是想要这个吗?如果只是单纯的想去掉附加信息,那么用substring截取最方便
      

  5.   

    不好意思﹐可能我说的不够清楚吧﹐我的意思是
    raiserror ‘Error’,16,1
    能否在弹出的错误提示中只显示 Error ﹐而没有其它附加字符串﹐此处错误信息已经确定是 Error ﹐我想应该不用再截取了吧﹖
      

  6.   

    if @@error<>0 then select 'Error'
      

  7.   

    我现在想了一个比较笨的办法去解决它﹐我在SQL Stored Procedure中定义了一个字符串参数 @TipMsg Varchar(100) Output﹐在vb中调用之后﹐使用vb的MsgBox来显示相关提示﹐这样弹出的提示就不会多一些附加字符了。只是我不明白SQL中可不可以实现类似效果呢﹖我试了一下 Print “OK”﹐好象在vb中调用之后并没有弹出提示。
      

  8.   

    在最后用select @tipmsg我也喜欢在存储过程用这种方法CREATE PROCEDURE DeleteGroup 
    @GroupID Integer
    AS
    SET NOCOUNT ON
    BEGIN TRAN
    DELETE A FROM EmpList A WHERE GroupID=@GroupID
    DELETE A FROM GroupList A WHERE ID=@GroupID
    IF @@ERROR <> 0 GOTO ER
    COMMIT TRAN
    SELECT 'OK',0
    SET NOCOUNT OFF
    RETURN
    ER:
    ROLLBACK TRAN
    SELECT 'ERROR',@@ERROR
    SET NOCOUNT OFF
    GO用rst.open "exec DeleteGroup 1",conn
    在打开的数据集里就会有
    ok 0
    或者
    error n