为何同一个SqlException.Number错误码存在两份不同的官方说明?
同编号SQL错误码多释义的核心原因
这种现象本质是SQL Server生态的错误码体系存在两套独立的命名空间,同数字编号并不代表是同一类错误:
- 第一类是SQL Server数据库引擎服务端错误码:由数据库实例运行时内部逻辑抛出,比如数据转换失败、语法错误、权限不足这类错误都属于这一类
- 第二类是客户端驱动层错误码:由ODBC、SqlClient、JDBC这类连接SQL Server的客户端驱动程序抛出,比如网络中断、连接建立失败这类客户端侧的异常都属于这一类
两类错误的编号分配完全独立,互不冲突,所以会出现同一个数字编号对应完全不同的错误说明的情况。
你提到的两个错误码的具体解释
错误码10053
- 你查到的
A transport-level error has occurred when receiving results from the server属于客户端驱动抛出的网络层异常,对应连接过程中网络中断的场景 - 你查到的
Could not convert the data value due to reasons other than sign mismatch or overflow属于数据库引擎抛出的服务端错误,对应数据类型转换失败的场景
错误码11001
同一官方文档页相邻出现的两个释义,分别对应驱动层和服务端的同编号错误:
Non-NULL value successfully returned.是服务端存储过程相关的返回码An error has occurred while establishing a connection to the server.是客户端驱动抛出的连接失败异常
收集瞬态错误码的注意事项
做容错机制收集transient错误的时候,不能仅靠错误码数字判断,还要结合错误抛出的来源、错误的严重级别(severity)综合判断,避免把非瞬态的服务端错误当成可重试的瞬态错误处理。
内容的提问来源于stack exchange,提问作者Ahmad Akra
相关产品推荐
相关产品推荐

