我注意到在存储过程中触发此错误时,它将返回50,000。有没有一种方法可以将其修改为50999,以便前端应用程序可以专门识别该错误,而不会将其与其他任何内容混淆。
RAISERROR('Client already has an Active Visit!',16,1)
答案 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。