﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Kevin's Java Life-文章分类-数据库相关</title><link>http://www.blogjava.net/kevin/category/822.html</link><description>    喝一杯咖啡，生活变得从容和清新</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 08:09:36 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 08:09:36 GMT</pubDate><ttl>60</ttl><item><title>在条件查询中，数据库是如何比较记录的？</title><link>http://www.blogjava.net/Kevin/articles/2288.html</link><dc:creator>Kevin</dc:creator><author>Kevin</author><pubDate>Mon, 21 Mar 2005 10:42:00 GMT</pubDate><guid>http://www.blogjava.net/Kevin/articles/2288.html</guid><wfw:comment>http://www.blogjava.net/Kevin/comments/2288.html</wfw:comment><comments>http://www.blogjava.net/Kevin/articles/2288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Kevin/comments/commentRss/2288.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Kevin/services/trackbacks/2288.html</trackback:ping><description><![CDATA[<P><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在运行一段sql语句时出现下面的错误：[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]将数据类型 varchar 转换为 numeric 时出错。<BR>sql语句是及其简单的条件查询而已：</P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #0000ff">select</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">*</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">from</SPAN><SPAN style="COLOR: #000000">&nbsp;view_zsplc&nbsp;</SPAN><SPAN style="COLOR: #0000ff">where</SPAN><SPAN style="COLOR: #000000">&nbsp;jbrbh</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #ff0000">"&nbsp;+&nbsp;jbrbh&nbsp;+&nbsp;"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">and</SPAN><SPAN style="COLOR: #000000">&nbsp;lczt</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">"&nbsp;</SPAN><SPAN style="COLOR: #808080">+</SPAN><SPAN style="COLOR: #000000">&nbsp;lczt</SPAN></DIV></DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关键在于这里的jbrbh是varchar类型，而我忘了在sql语句中加入单引号了。在比较数据库已有的记录值和传入的参数值时，出现了转换错误。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是奇怪的是这里执行的转换是将数据类型 varchar 转换为 numeric ！而不是将numeric&nbsp; 转换为 varchar！也就是说SQLServer 是<FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000>将数据表中对应栏位的值转成传入参数的类型，再与传入参数进行比较的</FONT>。再看数据库，果然对应栏位上有NULL值和空串。看来SQLServer 是在准备将varchar型栏位的NULL值或空串转成numeric时出错的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 马上将数据库中对应栏位都加上一个值，再次执行sql语句，顺利通过。说明上面的结论是正确的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个问题是比较隐蔽的，如果数据库中暂时没有NULL值和空串，就不会出错。如果不了解SQLServer 的转换方式，而条件中栏位又比较多时，很可能会查个头晕脑涨！解决之道还是在于编码时细心一点，写完别忘了再检查一遍。</FONT><img src ="http://www.blogjava.net/Kevin/aggbug/2288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Kevin/" target="_blank">Kevin</a> 2005-03-21 18:42 <a href="http://www.blogjava.net/Kevin/articles/2288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>