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 的"自动转换"复选框,或在客户端安装服务器的代码页。运行 EXECsp_server_info 18 可以确定服务器代码页。 |
HY000 | 从 SQL Server 接收到未知的令牌环。 | 服务器的 TDS 流无效。此错误一般是由服务器上的问题引起的。请查看SQL Server 错误日志。 |
HY000 | 警告:部分插入/更新。插入或更新 text 或 image 列不成功。 | 在插入或更新 text、image 或 ntext 列的过程中发生了错误。该列将包含不正确的数据。如果可能,请回滚事务。 |