在SQL-Server中,取出第n条到第m条记录可以这样写
例如:
从publish 表中取出第 n 条到第 m 条的记录:
SELECT TOP m-n+1 *
FROM publish
WHERE (id NOT IN
(SELECT TOP n-1 id
FROM publish order by id)) order by id
id 为publish 表的关键字
以下几种是我在别人的博客中看到的前两种看了下,做下总结。
(1) --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)
SELECT TOP n - m + 1 *
FROM Table
WHERE (id NOT IN ( SELECT TOP m - 1 id FROM Table ))
这种方法和我上边写的一样,主要的思想就是,先选出表中所有的项,m-n+1是表中有几条,然后top n-m+1 就可以找出需要的条数。关键中中间的
(SELECT TOP m-1 id FROM Table ) 这句话也是先选出表中所有项,再选出 top m-1就是,表的前m-1条了。最加上 WHERE (id NOT IN (SELECT TOP m-1 id FROM Table ))最后讲所有选出的记录去掉top m-1条,在取出top n-m+1 就是答案了。
(2) -- 从TABLE表中取出第m到n条记录 (Exists版本)SELECT TOP n - m + 1 * FROM TABLE AS a WHERE Not Exists
( Select * From ( Select Top m - 1 * From TABLE order by id) b Where b.id = a.id )
Order by id
这种方法和第一种方法思想差不多,都是先选出所有的数据,排除前top m-1个数据,最后取出top n-m+1 。这里需要注意的是如果你要按照某种顺序排序的话,则就需要在如上得两处order by id。还有这里的Where b.id=a.id 去掉就不行了,不知道为什么?
'@P0'附近有语法错误
原因:
在Java中对数据库查询时经常使用“Select Top ? * From 表名 Where 列名 = ?”的SQL语句,此时的问号是PreparedStatement预编译对象的参数占位符,需要使用setXX()系列方法对其赋值后再执行。
但是,Top后面是不允许使用问号占位符的,此处的错误就是由此引起的。
解决方案:
应将Top后面的问号改为具体数字,或者使用“+”连接变量与字符串。
上句SQL可修改为以下写法:
"Select Top " + num + " * From 表名 Where 列名 = ?"
上述num为int型变量。除了Top后的问号以外,其他参数占位符不受此约束。
以上~~