ODBC错误信息

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 也表明成功执行。

SQLSTATEODBC 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分配时出错
22008Datetime 字段溢出
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驱动程序名称过长
IM012DRIVER 关键字语法错误
IM013跟踪文件错误
S0001基表或视图已存在
S0002未找到基表
S0011索引已经存在
S0012未找到索引
S0021列已存在
S0022未找到列
S0023列无默认值
S1000常规错误
S1001内存分配失败
S1002列编号无效
S1003程序类型超出范围
S1004SQL 数据类型超出范围
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 配置的默认语言。
01000Null 位数据强制为零。正将包含 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 中提供的终止符字符串无效。
HY000Bcp 主文件必须至少包含一列。未选定任何要装载的列。
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 语句。
HY000ODBC BCP/驱动程序版本不匹配。Sqlsrv32.dll 和 Odbcbcp.dll .dll 不具有相同的版本。在客户端安装客户实用工具,然后重新启动应用程序。
HY000TDS 流中发生协议错误。服务器的 TDS 流无效。此问题一般是由 SQL Server 问题引起的。请查看SQL Server 错误日志。
HY000表中包含的行数小于第一个行计数。提供了起始行号,但服务器上的表未包含那些行数。未向主文件复制任何行。
HY000表中包含的行数小于最后一个行计数。提供了结束行号,但服务器上的表未包含那些行数。
HY000表没有 text/image 列。调用了 bcp_moretext,但表不包含任何 text image 列。
HY000TDS 缓冲区长度过大。服务器的 TDS 流无效。此问题一般是由 SQL Server 问题引起的。请查看SQL Server 错误日志。
HY000文本列数据不完整。bcp_moretext 所提供的长度的总和与 bcp_bind 或 bcp_collen 中所提供的长度不匹配。
HY000BCP 主文件包含的行数小于第一个行计数。提供了起始行号,但主文件未包含那些行数。未装载任何行。
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 操作过程中,在处理最后一行的过程中,检测到了文件结尾。通常,这是由于原始表和正在装载的表具有不同的列数、类型、为空性或大小而造成的。
HY000Unicode 转换失败。在和 Unicode 字符串之间进行转换时出错。本机错误将包含该 Win32 错误代码。
HY000Unicode 转换失败。必须在客户系统上安装 SQL server 代码页。服务器代码页必须在客户端存在,方能执行正确的操作。清除 DSN 的"自动转换"复选框,或在客户端安装服务器的代码页。运行 EXEC sp_server_info 18 可以确定服务器代码页。
HY000从 SQL Server 接收到未知的令牌环。服务器的 TDS 流无效。此错误一般是由服务器上的问题引起的。请查看SQL Server 错误日志。
HY000警告:部分插入/更新。插入或更新 text 或 image 列不成功。在插入或更新 textimagentext 列的过程中发生了错误。该列将包含不正确的数据。如果可能,请回滚事务。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值