sqlsrv的分页代码

如果想返回某个范围内的几条数据,在mysql下我们有非常好用的LIMIT 语法

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 

LIMIT接受一个或两个参数,以逗号分割
LIMIT N:返回前N条纪录
LIMIT M,N:返回M+1至M+N行的纪录

但是对于sqlsrv就没有类似的用法了,只有类似LIMIT N 的 TOP N 语法。

SELECT TOP N * FROM table;

那么怎么在sqlsrv中实现LIMIT M,N的效果呢?经测试以下代码可以实现

SELECT TOP M id FROM table WHERE id NOT IN (SELECT TOP N id FROM table);

但是需要注意的是,如果在后面加入了更多语句如排序(ORDER BY) ,子查询语句也需要保持一致,如

SELECT TOP M id FROM table WHERE id NOT IN
 (SELECT TOP N id FROM table ORDER BY id ASC) 
ORDER BY id ASC;

(真是坑爹啊)