Kevin's Java Life

喝一杯咖啡,生活变得从容和清新
随笔 - 3, 文章 - 12, 评论 - 1, 引用 - 0
数据加载中……

在条件查询中,数据库是如何比较记录的?

         在运行一段sql语句时出现下面的错误:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]将数据类型 varchar 转换为 numeric 时出错。
sql语句是及其简单的条件查询而已:

"select * from view_zsplc where jbrbh=" + jbrbh + " and lczt=+ lczt

        关键在于这里的jbrbh是varchar类型,而我忘了在sql语句中加入单引号了。在比较数据库已有的记录值和传入的参数值时,出现了转换错误。
       但是奇怪的是这里执行的转换是将数据类型 varchar 转换为 numeric !而不是将numeric  转换为 varchar!也就是说SQLServer 是将数据表中对应栏位的值转成传入参数的类型,再与传入参数进行比较的。再看数据库,果然对应栏位上有NULL值和空串。看来SQLServer 是在准备将varchar型栏位的NULL值或空串转成numeric时出错的。
       马上将数据库中对应栏位都加上一个值,再次执行sql语句,顺利通过。说明上面的结论是正确的。
       这个问题是比较隐蔽的,如果数据库中暂时没有NULL值和空串,就不会出错。如果不了解SQLServer 的转换方式,而条件中栏位又比较多时,很可能会查个头晕脑涨!解决之道还是在于编码时细心一点,写完别忘了再检查一遍。

posted on 2005-03-21 18:42 Kevin 阅读(624) 评论(0)  编辑  收藏 所属分类: 数据库相关


只有注册用户登录后才能发表评论。


网站导航: