在访问SQLServer2000/2005的时候,总是会报告SQLSTATE=...,这个东西到底是什么意思?

SQL92 规范中就已经明确规定了 SQLSTATE。

在SQLServer 2000的联机丛书中,解释ODBC错误信息的时候说到:

[u]根据 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 定义。[/u]

升级到SQL 2005以后的SQLSTATE有了变化,google sqlstate odbc3.x mapping时可以得到msdn上提供的从odbc2.x 到odbc 3.x 过程中SQLSTATE的变化映射。在这篇文章的开头这样说的:

[u]In ODBC 3.x, HYxxx SQLSTATEs are returned instead of S1xxx, and 42Sxx SQLSTATEs are returned instead of S00XX. This was done to align with X/Open and ISO standards. In many cases, the mapping is not one-to-one because the standards have redefined the interpretation of several SQLSTATEs.
[/u]

所以说如果想知道返回的SQLSTATE到底是怎么回事,查上述两篇文章可以知道个大概齐。

此外应用从ODBC2.x升级到ODBC3.x的时候,如果原先根据返回的SQLSTATE做了相应的逻辑,现在得改一下。好在SQLServer提供了一个让程序员偷懒的办法,把环境变量设置SQL_ATTR_ODBC_VERSION设置成为SQL_OV_ODBC2,这样底层驱动会返回原来ODBC 2.x的SQLSTATE。

关于这一点,原话是这样说的:

[u]When an ODBC 2.x application is upgraded to an ODBC 3.x application, the application has to be changed to expect ODBC 3.x SQLSTATEs instead of ODBC 2.x SQLSTATEs. The following table lists the ODBC 3.x SQLSTATEs that each ODBC 2.x SQLSTATE is mapped to.
When the SQL_ATTR_ODBC_VERSION environment attribute is set to SQL_OV_ODBC2, the driver posts ODBC 2.x SQLSTATEs instead of ODBC 3.x SQLSTATEs when SQLGetDiagField or SQLGetDiagRec is called. A specific mapping can be determined by noting the ODBC 2.x SQLSTATE in column 1 of the following table that corresponds to the ODBC 3.x SQLSTATE in column 2.[/u]

SQLSTATE到底是什么意思相关推荐

  1. mysql sqlstate 42000_mysql-SQLSTATE [42000]:语法错误或访问冲突:...

    因此,我从Laravel收到以下错误: SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: ...

  2. mysql sqlstate 23000_如何解决SQLSTATE [23000]:违反完整性约束:...

    这是我的MySQL错误. SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 2 我用谷歌 ...

  3. [转载]Tensorflow 的reduce_sum()函数的axis,keep_dim这些参数到底是什么意思?

    转载链接:https://www.zhihu.com/question/51325408/answer/125426642 来源:知乎 这个问题无外乎有三个难点: 什么是sum 什么是reduce 什 ...

  4. 硬核科普:到底啥是云原生?

    本文主要根据课程 什么是云原生?_哔哩哔哩_bilibili 总结而来,其他参考文章如下: <云原生人才计划之Kubernetes 技术图谱>发布! - 知乎 (zhihu.com) ku ...

  5. 深度学习到底有哪些卷积?

    深度学习到底有哪些卷积? 深度学习中不同种类的卷积(比如 2D / 3D / 1x1 /转置/扩张(Atrous)/空间可分/深度可分/平展/分组/混洗分组卷积),能帮理解实际的工作方式. 总结深度学 ...

  6. 做技术到底可以做到哪种地步-技术为什么越走越窄 (转)

    尽管做技术已经有不少年头了,不管是犹犹豫豫还是坚定不移,我们走到了现在,依然走在技术这条路上. 不管我们处于何种职位,拿着哪种薪水,其实,我们会是不是的问问自己"做技术到底可以做到那种地步& ...

  7. Django-C002-深入模型,到底有多深

    此文章完成度[100%]留着以后忘记的回顾.多写多练多思考,我会努力写出有意思的demo,如果知识点有错误.误导,欢迎大家在评论处写下你的感想或者纠错. ORM介绍:对象关系映射(英语:(Object ...

  8. Web service到底是什么?

    Web service到底是什么:在什么情况下你应该使用Web service. 分布式应用程序和浏览器 研究一下当前的应用程序开发,你会发现一个绝对的倾向:人们开始偏爱基于浏览器的瘦客户应用程序.这 ...

  9. Android:JNI 与 NDK到底是什么

    前言 在Android开发中,使用 NDK开发的需求正逐渐增大 但很多人却搞不懂 JNI 与 NDK 到底是怎么回事 今天,我将先介绍JNI 与 NDK & 之间的区别,手把手进行 NDK的使 ...

最新文章

  1. c++设计模式:单例模式
  2. java 本地 mq_java rocketmq--消息的产生(普通消息)
  3. JavaOne 2012:观察与印象
  4. 将本地源代码程序推送远程Github仓库
  5. 1.django 开发环境搭建
  6. PL/SQL Developer 更改字体
  7. 【OpenCV】图像平滑
  8. jsp常用内置对象---response
  9. IIS(IISReset.exe)命令行(备忘)
  10. Objective-C 常用结构体
  11. python 图像二值化处理
  12. html鼠标滑动响应,CSS鼠标响应事件经过、移动、点击示例介绍
  13. 十位博客专家极力推荐的 谷歌浏览器插件,用过都说好
  14. php ctf题,CTF---PHP安全考题
  15. ireport mysql_iReport连接Mysql创建图表报表
  16. 身份证最后一位出现“X”之原因
  17. matlab实现模糊控制器并仿真,用Matlab实现空调温度模糊控制器的设计与仿真.pdf...
  18. c语言递推算法微课,高中数学题型方法100讲[微课视频]
  19. 银联Pos终端签到、签退、批结算、批上送
  20. flutter常用命令及问题

热门文章

  1. python爬虫--正则表达式与Cookie的使用
  2. 快乐赚源码CPA兼职广告任务网源码V1版
  3. 与汇编语言相比C51,与汇编语言相比,C51语言具有()、()、()、()等优点。...
  4. 性能结果分析与理解(关于90%响应时间、图表等)
  5. artical weekly181205
  6. python爬虫程序详解_Python网络爬虫之三种数据解析方式
  7. 华清远见-重庆中心-JavaWeb阶段技术总结/知识点梳理/个人总结
  8. RestTemplate封装方法
  9. 美标C63000铝青铜挤压棒C63000标准化学成分
  10. JavaWeb 尚硅谷书城项目