首页 » SQL Server » sqlserver列名无效调试及解决方法

sqlserver列名无效调试及解决方法

原文 http://blog.csdn.net/linlinxie/article/details/78275009

2017-10-18 18:20:56阅读(420)

今天用ssm和做sqlserver查询时报错:列名’D’无效
mapper.java

List<ChangeShipmentWithOrderIdDto> getChangeCancelWithShipmentType(@Param("changeTypeArr") String[] changeTypeArr);

mapper.xml

<select id="getChangeCancelWithShipmentType" resultMap="ChangeCancelResultWithOrderId" >
     SELECT CHANGE_ID FROM BC_CHANGE_SHIPMENT WHERE TYPE IN 
        <foreach collection="changeTypeArr" item="type" open="(" close=")" separator=",">
            ${type}
        </foreach>
</select>

然后报错,错误信息为:

org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'C' 无效。 ### The error may exist in file [F:\Java\workspace\tangb2c_20170901\tangb2c-app-service\target\classes\mybatis-mapping\change\mapper\ChangeQueryMapper.xml] ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: SELECT CHANGE_ID FROM BC_CHANGE_SHIPMENT WHERE TYPE IN ( W , D , C )  ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'C' 无效。 ; bad SQL grammar []; nested exception is 

从报错信息可以看出本来应该是?,?,?这样的参数,但是这里直接打印出来了,而且没有引号,所以sqlserver认为是个列名,调试的时候可以把sql语句放到navicate中,错误信息会更全面,在认真检查是xml中用了${type},正确应该是#{type}

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹