问题:在分页查询时,使用top 出现 '@P0' 附近有语法错误。
查看sql语句,尤其是用到#和$等进行赋值的,区分开到底是用#还是$
SELECT TOP #pageSize# *
FROM t_employee
WHERE (ID NOT IN
(SELECT TOP #pagetemp# id
FROM t_employee
ORDER BY id desc))
ORDER BY ID desc
改成:$
sqlserver 使用top后跟的数字不能绑定,只能拼接!
ibatis文档说明:
简单动态SQL元素
虽然动态Mapped Statement API功能强大,但有时仅需要一小部分的动态SQL即可。为此,SQL statement和statement都可以包含简单的动态SQL元素,以帮助实现动态的order by子句,动态的查询字段或SQL语句的其他动态部分。简单动态SQL元素的概念有点象inline parameter的映射,但使用了稍微不同的语法。考虑下面的例子:
<statement id=”getProduct” resultMap=”get-product-result”>
select * from PRODUCT order by $preferredOrder$
</statement>
上面的例子中,preferredOrder动态元素将被参数对象的preferredOrder属性值替换(象parameter map一样)。不同的是,它从根本上改变了SQL语句本身,比仅仅简单地改变参数值严重得多。在这样的动态SQL语句中,错误可能会引起安全,性能和稳定性的风险。因此,应细心检查,以确保简单动态SQL元素使用的正确。另外,还要留意您的设计,以防数据库细节对业务逻辑对象模型造成不好的影响。例如,不应因为要使用order by子句,而将一个数据字段名作为业务对象的属性,或作为JSP页面的一个域的值。