1

大多数关于 SQL Server 错误处理的在线讨论似乎都集中在如何优雅地处理 T-SQL 处理引发的错误,使用 THROW 或 TRY...CATCH 等等。

我所拥有的是一个接受多个参数的存储过程。其中一些参数的值必须在一定范围内,因此在我的过程开始时,我想检查从应用程序 (ASP.NET) 传递的值,如果它们不在范围内则返回错误可接受的界限。

目前我有:

IF @RequesterType <> 2 AND @RequesterType <> 3
BEGIN
    RAISERROR('The value for RequesterType must be either 2 (Client) or 3 (Representative)', 10, 1)
    RETURN;
END

当我从 SSMS 中执行包含此代码的过程并传递 2 或 3 以外的值时,果然显示了我指定的消息。但它似乎……不够严重。发生实际错误似乎并不明显。

我知道可以指定 RAISERROR 语句的严重性参数,但除非我将其设置得非常高(我相信 > 19),表明一个致命的系统错误,我认为这不会有太大的不同.

我只是想知道,使用我拥有的代码,当 Web 应用程序调用此过程时,它是否真的会知道发生了错误。调用该过程的 VB.NET 代码是否知道已引发错误?如果没有,我怎么能重新编写我的程序以便它会呢?我确信有一种最佳实践方法可以做到这一点,但目前我觉得我正在尝试破解它。

我正在使用 SQL Server 2012。

4

1 回答 1

1

您应该使用安全级别为 16 的 RAISERROR。根据http://www.sommarskog.se/error-handling-I.html ,此值表示:“16 – Miscellaneous User Error”。

例子:

PRINT 'Test #1'
RAISERROR('First bla, bla, bla', 10, 1)
PRINT 'Test #2'
RAISERROR('Second bla, bla, bla', 16, 1)

输出:

Test #1
First bla, bla, bla
Test #2
Msg 50000, Level 16, State 1, Line 4
Second bla, bla, bla
于 2014-06-12T18:22:43.757 回答