在错误过程中返回了错误ID 50,000

时间:2018-07-25 10:52:30

标签: sql-server tsql

我注意到在存储过程中触发此错误时,它将返回50,000。有没有一种方法可以将其修改为50999,以便前端应用程序可以专门识别该错误,而不会将其与其他任何内容混淆。

RAISERROR('Client already has an Active Visit!',16,1)

3 个答案:

答案 0 :(得分:1)

根据RAISERROR (Transact-SQL)的文档:

  

该消息作为服务器错误消息返回给调用方   应用程序或CATCH结构的关联TRY…CATCH块中。   新应用应改为使用THROW

强调我的。 (THROW (Transact-SQL)

我不知道您的SQL语句是什么样子,但是,因此您可以执行以下操作:

BEGIN TRY 
     --Your INSERT statement
     SELECT 0/0; --Causes an error
END TRY
BEGIN CATCH
    THROW 50099, 'Client already has an Active Visit!',1;
END CATCH

答案 1 :(得分:1)

您需要指定raiseerror函数的第一个参数,如下所示:

--configure the error message
sp_addmessage @msgnum = 50999,  
          @severity = 16,  
          @msgtext = N'Client %s already has an Active Visit!';   
GO

-- throw error
RAISERROR (50999, -- Message id.  
       16, -- Severity,  
       1, -- State,  
       N'123456789'); -- First argument supplies the string.  
GO  

输出将为

Msg 50999, Level 16, State 1, Line 8
Client 123456789 already has an Active Visit!

如果您未指定错误号,则将假定提高错误数为50000。文档here ...

答案 2 :(得分:1)

使用RAISEERROR,如果将message作为第一个参数使用,则不能指定错误ID,它的隐含值为50000。但是,您可以创建带有参数的自定义消息并在此处传递代码。即:

RAISERROR('Client already has an Active Visit! - Specific Err.Number:[%d]',16,1, 50999)

对于新应用程序,建议使用Try \ Catch。