适用于:SQL Server
当错误是由 SQL Server 数据库引擎引起时,此错误的严重性可说明 SQL Server 所遇到问题的类型。
严重性级别
下表列出并说明 SQL Server 数据库引擎所引起错误的严重级别。
| 严重性级别 | 说明 |
|---|---|
| 0-9 | 指示返回状态信息或报告不严重的错误的信息性消息。 数据库引擎不会引起严重级别为 0 到 9 的系统错误。 |
| 10 | 指示返回状态信息或报告不严重的错误的信息性消息。 由于兼容性原因,数据库引擎在将错误信息返回到调用应用程序前将严重性级别从 10 转换为 0。 |
| 11-16 | 指示可由用户纠正的错误。 |
| 11 | 指示给定的对象或实体不存在。 |
| 12 | 特殊严重性,用于因特殊查询提示而不使用锁定的查询。 在某些情况下,这些语句执行的读取作可能会导致数据不一致,因为不会采取锁来保证一致性。 |
| 13 | 指示事务死锁错误。 |
| 14 | 指示安全性相关错误,如权限被拒绝。 |
| 15 | 指示 Transact-SQL 命令中的语法错误。 |
| 16 | 指示可由用户纠正的常规错误。 |
| 17-19 | 指示无法由用户纠正的软件错误。 请将问题通知系统管理员。 |
| 17 | 指示语句导致 SQL Server 用尽资源(如数据库的内存、锁或磁盘空间)或超出了系统管理员设置的某些限制。 |
| 18 | 指示数据库引擎软件中存在问题,但语句完成,并且维护与数据库引擎实例的连接。 每当出现严重级别为 18 的消息时均应通知系统管理员。 |
| 19 | 指示超出了不可配置的数据库引擎限制并且当前批处理已终止。 严重级别为 19 或更高的错误消息将停止执行当前的批处理。 严重级别为 19 的错误很少,必须由系统管理员或主要支持提供商更正。 当引发严重级别为 19 的消息时,请与系统管理员联系。 严重级别从 19 到 25 的错误消息均写入错误日志。 |
| 20-24 | 指示系统问题和严重错误,这意味着运行语句或批处理的数据库引擎任务不再运行。 此任务记录了所发生事件的有关信息,然后终止。 在大多数情况下,与数据库引擎实例的应用程序连接也可能终止。 如果确实存在,则根据问题,应用程序可能无法重新连接。 此范围内的错误消息可能会影响访问数据库中数据的所有进程,并可能指示数据库或对象已损坏。 严重级别从 19 到 24 的错误消息均写入错误日志。 |
| 20 | 指示语句遇到问题。 由于问题仅影响当前任务,因此数据库本身不太可能损坏。 |
| 21 | 指示已遇到影响当前数据库中所有任务的问题,但数据库本身不太可能损坏。 |
| 22 | 指示消息中所指定的表或索引因软件或硬件问题而损坏。 很少发生严重级别为 22 的错误。 如果发生这种错误,请运行 DBCC CHECKDB 以确定数据库中的其他对象是否也已损坏。 这种问题可能只是出现在缓存中而不存在于磁盘本身。 如果发生此错误,请重新启动数据库引擎实例更正此问题。 若要继续工作,必须重新连接到数据库引擎的实例。 否则,请使用 DBCC 修复问题。 在某些情况下,可能需要还原数据库。如果重启数据库引擎的实例无法更正问题,则问题位于磁盘上。 有时销毁错误消息中指定的对象可解决问题。 例如,如果消息报告数据库引擎的实例在非聚集索引中发现了长度为 0 的行,则请删除该索引并重建。 |
| 23 | 指示整个数据库的完整性因硬件或软件问题而出现问题。 很少发生严重级别为 23 的错误。 如果发生这种错误,请运行 DBCC CHECKDB 以确定损坏的程度。 这种问题可能只是出现在缓存中而未出现在磁盘本身。 如果发生此错误,请重新启动数据库引擎实例更正此问题。 若要继续工作,必须重新连接到数据库引擎的实例。 否则,请使用 DBCC 修复问题。 在某些情况下,可能需要还原数据库。 |
| 24 | 指示介质故障。 系统管理员可能需要还原数据库。 你还可能需要呼叫硬件供应商。 |
用户定义的错误消息严重性
可以使用 sp_addmessage 将严重级别为 1 到 25 的用户定义错误消息添加到 sys.messages 目录视图中。 这些用户定义的错误消息可供 RAISERROR 使用。 有关详细信息,请参阅 sp_addmessage。
可用 RAISERROR 生成严重性级别为 1 到 25 的用户定义错误消息。
RAISERROR 可以引用 sys.messages 目录视图中存储的用户定义错误消息,也可以动态构建消息。 当 RAISERROR 在生成错误时使用用户定义的错误消息 sys.messages 时,由 RAISERROR 重写在中指定的 sys.messages严重性所指定的严重性。 有关详细信息,请参阅 RAISERROR。
错误严重性和 TRY...CATCH
TRY...CATCH构造捕获严重性大于 10 且不会终止数据库连接的所有执行错误。
严重性为 0 到 10 的错误是信息性消息,不会导致执行从 CATCH 构造块 TRY...CATCH 跳转。
终止数据库连接(通常严重性为 20 到 25)的错误不会由 CATCH 块处理,因为连接终止时会中止执行。
有关详细信息,请参阅 TRY...CATCH。
检索错误严重性
系统 ERROR_SEVERITY 函数可用于检索导致 CATCH 构造块 TRY...CATCH 运行的错误的严重性。
ERROR_SEVERITY如果在块范围CATCH之外调用,则NULL返回。 有关详细信息,请参阅 ERROR_SEVERITY。