SQL Server 2005 + Java '@P0' 附近有语法错误

.

.

.

.

.

今天写了一个这样的分页查询:

 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 注入的问题),所以建议改用存储过程来保障程序的安全性。

原文地址:https://www.cnblogs.com/0xcafebabe/p/2322089.html