.
.
.
.
.
今天写了一个这样的分页查询:
1 SELECT
2 TOP ? *
3 FROM
4 [Goods]
5 WHERE
6 id NOT IN (
7 SELECT
8 TOP (? * (? - 1)) id
9 FROM
10 [Goods]
11 ORDER BY
12 id
13 )
14 ORDER BY
15 id
可是执行之后总是报“'@P0' 附近有语法错误”错误,十分郁闷。
刚开始以为是没有获得到参数,可是跟踪了几次之后发现一切执行都正常。
后来才发现,不知道是 SQL Server 不支持在 SQL 语句的 top 后面使用 "?" 占位符还是 Java 不支持在 SQL 语句的 top 后面使用 "?" 占位符。
总之改为如下方式就可以了:(也就是字符串拼接的方式)
1 String sql = " SELECT TOP " + pageIndex + " * FROM [Goods] WHERE [id] NOT IN (SELECT TOP (? * (? - 1)) [id] FROM [Goods] ORDER BY [id])"
2 + " ORDER BY [id]"
但是这样做就会带来安全性问题(主要是 SQL 注入的问题),所以建议改用存储过程来保障程序的安全性。