数据库ODBC错误信息含义查询


根据 X/Open 和 SQL Access Group SQL CAE 规范 (1992) 所进行的定义,SQLERROR 返回 SQLSTATE 值。SQLSTATE 值是包含五个字符的字符串。下表列出了驱动程序可以为 SQLError 返回的 SQLSTATE 值。
为 SQLSTATE 返回的字符串值由两个字符的类值后接三个字符的子类值组成。类值 01 表明是一种警告,后跟随 SQL_SUCCESS_WITH_INFO 的返回代码。只要类值不是 01(IM 除外),则表明是一种错误,后跟随 SQL_ERROR 的返回代码。类 IM 专门用于表明从 ODBC 实现产生的警告和错误。任何类中子类值 000 均用于实现给定类中所定义条件。这种类值和子类值的分配方法由 SQL-92 定义。

说明   通常由返回值 SQL_SUCCESS 表明成功执行了一个函数,但 SQLSTATE 00000 也表明成功执行。
SQLSTATE ODBC API(驱动程序管理器)错误
00000 成功
01000 常规警告
01002 断开连接错误
01004 数据被截断
01006 未废除特权
01S00 无效连接字符串特性
01S01 行中的错误
01S02 选项值已更改
01S03 未更新或删除任何行
01S04 更新或删除了多行
01S05 取消操作被当成 FreeStmt/Close
01S06 设法在结果返回第一个行集之前进行提取
07001 参数个数错误
07006 违反受限制的数据类型特性
07S01 默认参数使用无效
08001 无法连接到数据源
08002 连接正在使用
08003 连接未打开
08004 数据源拒绝建立连接
08007 在执行事务的过程中连接失败
08S01 通讯链接失败
21S01 插入值列表与列列表不匹配
21S02 派生表的程度与列列表不匹配
22001 字符串数据右截断
22002 需要指示符变量,但未提供
22003 数字值超出范围
22005 分配时出错
22008 Datetime 字段溢出
22012 被零除错误
22026 字符串数据,长度不匹配
23000 违反完整性约束
24000* 无效的游标状态
25000 无效的事务状态
28000 无效的授权规范
34000 无效的游标名称
37000 语法错误或违规访问
3C000 重复的游标名称
40001 串行错误
42000 语法错误或违规访问
70100 操作终止
IM001 驱动程序不支持本函数
IM002 未找到源名称并且未指定默认驱动程序
IM003 无法装载指定的驱动程序
IM004 驱动程序的 SQLAllocEnv 失败
IM005 驱动程序的 SQLAllocConnect 失败
IM006 驱动程序的 SQLSetConnectOption 失败
IM007 未指定数据源或驱动程序;禁止对话
IM008 对话失败
IM009 无法装载转换 DLL
IM010 数据源名称过长
IM011 驱动程序名称过长
IM012 DRIVER 关键字语法错误
IM013 跟踪文件错误
S0001 基表或视图已存在
S0002 未找到基表
S0011 索引已经存在
S0012 未找到索引
S0021 列已存在
S0022 未找到列
S0023 列无默认值
S1000 常规错误
S1001 内存分配失败
S1002 列编号无效
S1003 程序类型超出范围
S1004 SQL 数据类型超出范围
S1008 已取消操作
S1009 参数值无效
S1010 函数序列错误
S1011 操作在此时无效
S1012 所指定的事务操作代码无效
S1015 无可用的游标名称
S1090 字符串或缓冲区长度无效
S1091 描述符类型超出范围
S1092 选项类型超出范围
S1093 参数编号无效
S1094 小数位数值无效
S1095 函数类型超出范围
S1096 信息类型超出范围
S1097 列类型超出范围
S1098 作用域类型超出范围
S1099 可为空类型超出范围
S1100 唯一性选项类型超出范围
S1101 准确性选项类型超出范围
S1103 方向选项超出范围
S1104 精度值无效
S1105 参数类型无效
S1106 提取类型超出范围
S1107 行值超出范围
S1108 并发选项超出范围
S1109 游标位置无效
S1110 驱动程序完成无效
S1111 书签值无效
S1C00 驱动程序无法执行
S1DE0 执行值挂起时无数据
S1T00 超时失效
* 在 SQL Server 企业管理器中,当设法保存选定表或保存数据库关系图时,如果 Microsoft® SQL Server™ 用尽资源,则可能接收到”游标状态无效”的错误信息。返回此错误的原因是,数据库或事务日志的空间不足,无法完成保存进程。若要修正此问题,请检查数据库或事务日志是否已满。如果已满,请增加数据库的大小以容纳更改。请检查其它的系统资源或与系统管理员联系。

除 ODBC 程序员参考文档中的标准 ODBC 错误信息外,SQL Server ODBC 驱动程序可以为某些 SQLSTATE 值返回错误信息,如下表所示。
SQLSTATE SQL SERVER 驱动程序错误
描述
01000 已将 %ld 行发送到 SQL Server。共有:%ld 行。 使用 BCP API,已将一批行发送到 SQL Server。
01000 成功进行了大容量复制,已总共将 %ld 行复制到主文件中。共收到:%ld 行。 使用 BCP API,已将一批行写入到主文件中。
01000 已拒绝对在 DSN 中配置的数据库进行访问。使用默认值。 数据库不存在,或用户不具有对该数据库的访问权限。使用了为登录 ID 配置的默认数据库。
01000 在设法访问日志文件时出错,禁用日志记录。 无法使用驱动程序统计或长时间查询的日志文件。已禁用驱动程序统计或长时间查询的日志记录。
01000 连接到备份服务器。 SQL Server 主服务器不可用,因此连接到后备服务器。
01000 不支持在 DSN 中配置的语言。使用默认值。 语言名称无效,或未在服务器上安装该语言。使用了为登录 ID 配置的默认语言。
01000 Null 位数据强制为零。 正将包含 NULL 的位字段装载到不支持 NULL 位数据的服务器。该字段设置为零。
01000 用 ‘EXEC’ 执行了过程。未返回任何输出参数。 无法作为 RPC 执行过程,并且指定了输出参数。因为已用 EXEC 执行了过程,将不存储任何输出参数。
01000 禁用 SQL 调试。 无法启用 SQL 调试,原因是没有为 SQL 调试对 SQL Server 进行配置。
01000 安装在 %s 服务器上的 ODBC 目录存储过程的版本为 %s;要确保正确操作,需要 %02d.%02d.%4.4d 版或更高版本。请与系统管理员联系。 通过执行 \Msqql\Install\Instcat.sql 安装 ODBC 目录存储过程。
01000 将长度为零的数据强制为长度为 1。 正在装载零长度二进制或字符字段,但不支持零长度数据。字段强制为 1 字节空格或二进制零。
01S02 游标并发已更改。 因为请求或查询的类型,应用程序请求了无法遵守的并发。代之以使用另一个并发。
01S02 游标类型已更改。 因为请求或查询的类型,应用程序请求了无法遵守的游标类型。代之以使用另一种游标类型。
01S02 服务器未遵守数据包大小更改,使用了服务器大小。 应用程序请求了无法为 SQL Server 所支持的非默认数据包大小。代之以使用服务器默认大小。
01S02 数据包大小已更改。 应用程序请求了非默认数据包大小,超出了允许的大小限制。根据所请求的大小是过大,还是过小,代之以使用最小的或最大的数据包大小。
01S02 登录超时已更改。 应用程序请求了一个过长的登录超时。代之以使用最大的登录超时。
07006 不允许使用 bcp_moretext 进行转换。 使用 bcp_moretext 的应用程序与列类型必须具有相同的字段类型。
08004 服务器拒绝连接;已拒绝对所选数据库的访问。 数据库不存在,或用户不具有对该数据库的访问权限。
08004 服务器拒绝连接;不支持所指定的语言。 语言名无效,或未在 SQL Server 上安装该语言。
HY024 数据库无效或无法访问。 数据库不存在,或用户不具有对该数据库的访问权限。
IM006 服务器不支持数据包大小更改,使用默认值。 应用程序请求了 SQL Server 不支持的非默认数据包大小。使用了客户默认大小。
HY000 所有绑定列都是只读的。 必须是可升级的列,以使用 SQLSetPos 或 SQLBulkOperations 更改或插入行。
HY000 已检测到一个旧 netlib (%s)。请删除并重新启动应用程序。 正在装载的 netlib 已过期。驱动程序请求一个较新的 netlib。
问题可能出在应用程序当前目录中的 netlib,正在装载的是这个 netlib,而不是系统目录中的那个。也可能是该 netlib 安装不当或已损坏。如果错误文本中所指定的 netlib 存在于 Windows 系统目录外的其它地方,请将其删除。如果 netlib 只存在于系统目录中,在客户端安装客户实用工具,然后重新启动应用程序。
HY000 尝试将 NULL 值大容量复制到不接受 NULL 值的 Server 列中。 字段包含 NULL 值,但列不允许 NULL 值。
HY000 尝试将过大的列大容量复制到 SQL Server。 为列提供的长度大于表中的列定义。
HY000 尝试读取 BCP 格式文件的未知版本。 bcp 格式文件中的标题行采用了不可识别的版本。
HY000 错误的大容量复制方向。必须是 IN 或者 OUT。 bcp_init 调用没有为 eDirection 参数指定有效的方向。
HY000 错误的终止符。 bcp_bind 中提供的终止符字符串无效。
HY000 Bcp 主文件必须至少包含一列。 未选定任何要装载的列。
HY000 无法生成 SSPI 上下文。 驱动程序无法获得集成安全性所要求的 SSPI 上下文。本机错误将包含该 Win32 错误代码。
HY000 无法初始化 SSPI 包。 驱动程序无法获得集成安全性所要求的 SSPI 上下文。本机错误将包含该 Win32 错误代码。
HY000 通讯模块无效。未正确安装驱动程序。 网络库 .dll 已损坏。在客户端安装客户实用工具,然后重新启动应用程序。
HY000 连接忙,结果针对另一个 hstmt。 SQL Server ODBC 驱动程序只允许一个活动的 hstmt。有关更多信息,请参见使用默认结果集。
HY000 未对 BCP 启用连接。 使用 BCP API 的应用程序必须在连接之前设置 SQLSetConnectAttr 或 SQL_SS_COPT_BCP 特性。
HY000 关闭连接时失败。 网络库中的 ConnectionClose 函数失败。此问题通常是由网络或 SQL Server 问题引起的。
HY000 对于 BCP,必须对所有变长数据指定长度前缀或终止符。 用 SQL_VARYLEN_DATA 调用了 bcp_bind,但未指定前缀长度或终止符。
HY000 只有在复制到服务器中时,才能跳过主文件列。 bcp out 格式文件指定应跳过列。不允许进行这种指定。创建一个视图,其中只包含所需列和该视图的 bcp out,或使用 -Q 标志提供一个只选择所需列的 SELECT 语句。
HY000 在 BCP 格式文件中找到不正确的主列号。 格式文件所包含的列号大于表中的列数。
HY000 在读取 bcp 数据文件时发生 I/O 错误。
HY000 在读取 BCP 格式文件时发生 I/O 错误。
HY000 写入 bcp 数据文件时发生 I/O 错误。
HY000 在写入 bcp 错误文件时发生 I/O 错误。
HY000 无效选项。 到 bcp_control 的 eOption 参数无效。
HY000 默认参数后面不允许有非默认参数。 在任何已用默认值进行指定的参数后面,存储过程的参数不能有非默认值。
HY000 没有足够的列绑定。 对于 bcp out,未绑定表的所有列。创建一个视图,其中只包含所需列和该视图的 bcp out,或使用 -Q 标志提供一个只选择所需列的 SELECT 语句。
HY000 ODBC BCP/驱动程序版本不匹配。 Sqlsrv32.dll 和 Odbcbcp.dll .dll 不具有相同的版本。在客户端安装客户实用工具,然后重新启动应用程序。
HY000 TDS 流中发生协议错误。 服务器的 TDS 流无效。此问题一般是由 SQL Server 问题引起的。请查看SQL Server 错误日志。
HY000 表中包含的行数小于第一个行计数。 提供了起始行号,但服务器上的表未包含那些行数。未向主文件复制任何行。
HY000 表中包含的行数小于最后一个行计数。 提供了结束行号,但服务器上的表未包含那些行数。
HY000 表没有 text/image 列。 调用了 bcp_moretext,但表不包含任何 text 或 image 列。
HY000 TDS 缓冲区长度过大。 服务器的 TDS 流无效。此问题一般是由 SQL Server 问题引起的。请查看SQL Server 错误日志。
HY000 文本列数据不完整。 bcp_moretext 所提供的长度的总和与 bcp_bind 或 bcp_collen 中所提供的长度不匹配。
HY000 BCP 主文件包含的行数小于第一个行计数。 提供了起始行号,但主文件未包含那些行数。未装载任何行。
HY000 行长度超过了 SQL Server 所允许的最大长度。 行的数据长度的总和大于最大行大小。
HY000 无法在服务器上找到完成此操作所需的存储过程(用 SQL Server 提供)。请与系统管理员联系。 通过执行 \Msqql\Install\Instcat.sql 安装 ODBC 目录存储过程。
HY000 无法装载通讯模块。未正确安装驱动程序。 此客户端上不存在为该连接指定的网络库 .dll。在客户端安装客户实用工具,然后重新启动应用程序。
HY000 无法打开 BCP 主数据文件。 在 bcp_init 调用中指定的文件名不存在,或已由另一个应用程序打开。
HY000 无法打开 BCP 错误文件。 在 bcp_init 调用中指定的错误文件名不存在,或已由另一个应用程序打开。
HY000 无法读取驱动程序版本。 驱动程序无法在其 .DLL 中读取版本块。在客户端安装客户实用工具,然后重新启动应用程序。
HY000 在 BCP 数据文件中遇到意外 EOF。 在执行 bcp in 操作过程中,在处理最后一行的过程中,检测到了文件结尾。通常,这是由于原始表和正在装载的表具有不同的列数、类型、为空性或大小而造成的。
HY000 Unicode 转换失败。 在和 Unicode 字符串之间进行转换时出错。本机错误将包含该 Win32 错误代码。
HY000 Unicode 转换失败。必须在客户系统上安装 SQL server 代码页。 服务器代码页必须在客户端存在,方能执行正确的操作。清除 DSN 的”自动转换”复选框,或在客户端安装服务器的代码页。运行 EXEC sp_server_info 18 可以确定服务器代码页。
HY000 从 SQL Server 接收到未知的令牌环。 服务器的 TDS 流无效。此错误一般是由服务器上的问题引起的。请查看SQL Server 错误日志。
HY000 警告:部分插入/更新。插入或更新 text 或 image 列不成功。 在插入或更新 text、image 或 ntext 列的过程中发生了错误。该列将包含不正确的数据。如果可能,请回滚事务。