在运行一段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 的转换方式,而条件中栏位又比较多时,很可能会查个头晕脑涨!解决之道还是在于编码时细心一点,写完别忘了再检查一遍。