我最好的google结果是this:
但是,从BOL,“任何用户都可以指定从0到18的严重级别。”
在我的特定存储过程中,我希望将错误返回到.Net客户端应用程序,因此看起来11-18之间的任何严重性级别都可以解决问题。有没有人有关于每个级别的含义以及如何使用它们的任何权威信息?
答案 0 :(得分:101)
Database Engine Severity Levels
您应该返回16.是默认的,最常用的错误级别:
表示可能出现的常规错误 由用户更正。
不要返回17-18,那些表示更严重的错误,如资源问题:
指出不能的软件错误 由用户纠正。通知你的 系统管理员的问题。
也不要返回11-15,因为它们具有附加到每个级别的特殊含义(14 - 安全访问,15 - 语法错误,13 - 死锁等)。
16级不会终止执行。
如果您打算记录警告但仍继续执行,请使用低于10的严重性级别。
答案 1 :(得分:2)
严重级别import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X = [[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 2, 1, 1],
[1, 3, 1, 1],
[1, 4, 1, 1],
[1, 2, 1, 1],
[1, 3, 1, 1],
[2, 4, 1, 1],
[1, 1, 1, 1],
[2, 1, 1, 1],
[2, 4, 1, 1],
[1, 5, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]
y = [
[1],
[1],
[1],
[3],
[2],
[1],
[3],
[2],
[1],
[1],
[2],
[1],
[1],
[1],
]
# Split X and y into X_
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=1)
regression_model = LinearRegression()
regression_model.fit(X_train, y_train)
print(regression_model.score(X_test, y_test)) # -1.1817143658810325
print(regression_model.predict([[1, 1, 1, 1]]) # [[0.9694444444444441]]
可以 终止执行。
16
终止对违规行以下所有内容的执行。
但是 此仅仅在尝试块内适用。
RAISERROR()
惊讶吗?我也是。
引发我困扰的原因还不是所有严重性- 16 都是一样的。
如果您要取消最顶部的Divide-By-Zero线的注释,则下面的任何内容都将无法运行。
除零逻辑还会 生成严重性 16 异常,
但与<{> {1}}不同,它是用完全停止来处理的。
注意:将--DECLARE @DivideByZero Int = 1/0--Uncommenting this will Skip everything below.
RAISERROR (N'Before Try: Raise-Error 16.', 16, 0)--Works.
SELECT 'Before Try: Select.'[Marker]--Works.
BEGIN TRY
RAISERROR (N'Inside Try: Raise-Error 16.', 16, 0)--Not displayed,but sends to Catch-Block.
SELECT 'Inside Try: Select.'[Marker]--Skipped.
END TRY
BEGIN CATCH
RAISERROR (N'Inside Catch: Raise-Error 16.', 16, 0)--Works.
SELECT 'Inside Catch: Select.'[Marker]--Works.
--RETURN --Adding Return will only skip what is After the Catch-Block for this scope only.
--;THROW--Shows the RAISERROR() from the Try-Block and Halts Execution. Must include ";".
END CATCH
RAISERROR (N'After Try-Catch: Raise-Error 16.', 16, 0)--Works.
SELECT 'After Try-Catch: Select.'[Marker]--Works.
用作捕获块中的 最后 行
引发由尝试块触发的RAISERROR()
事件的SQL异常。
这将有效地停止执行。
如果在调用;THROW
之前在捕获块中存在其他行,则需要RAISERROR()
分号。
如果您的逻辑正确处理了Catch-Block中的错误(并且您想继续处理
其余的逻辑),然后不使用;
。
不要混淆SQL-Server-Engine抛出的严重性- 16
和一个人在一起时,你会用;THROW
来提高自己。
对于所有意图和目的(故意抛出自己的错误),请仅考虑2个严重级别:
0 (用于信息或警告)和
16 (用于在Try-Block中引发异常-将其踢出Catch-Block)。
注意:如果您使用;THROW
显示参考消息,
那么我建议使用RAISERROR()
:
RAISERROR()
当您需要一些见识时,这在长时间批量操作中特别有用
您在整个批次中达到某些里程碑标志时,进展如何。
通过使用WITH NOWAIT
来 not ,您可能永远不知道信息性消息何时出现。
它们可能在整个批处理过程中间歇出现,或者在批处理完成时一次全部出现。