BlogJava-Kevin's Java Life-文章分类-数据库相关http://www.blogjava.net/kevin/category/822.html 喝一杯咖啡,生活变得从容和清新zh-cnWed, 28 Feb 2007 08:09:36 GMTWed, 28 Feb 2007 08:09:36 GMT60在条件查询中,数据库是如何比较记录的?http://www.blogjava.net/Kevin/articles/2288.htmlKevinKevinMon, 21 Mar 2005 10:42:00 GMThttp://www.blogjava.net/Kevin/articles/2288.htmlhttp://www.blogjava.net/Kevin/comments/2288.htmlhttp://www.blogjava.net/Kevin/articles/2288.html#Feedback0http://www.blogjava.net/Kevin/comments/commentRss/2288.htmlhttp://www.blogjava.net/Kevin/services/trackbacks/2288.html         在运行一段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 的转换方式,而条件中栏位又比较多时,很可能会查个头晕脑涨!解决之道还是在于编码时细心一点,写完别忘了再检查一遍。


Kevin 2005-03-21 18:42 发表评论
]]>