我找不到一种简单的方法来为SQL服务器进行复杂查询的分页。我需要编写将sql查询作为参数的函数(此查询可以包括子查询,按语句排序,分组等)并检索特定的结果页面。在oracle中,通过使用另一个select语句封装这样的查询很容易,但对于SQL服务器,我找不到任何simillar方式。我想避免的是解析输入SQL语句。我正在使用SQL Server 2005
答案 0 :(得分:2)
在SQL Server 2005及更高版本中进行分页最好通过排名功能完成。但是,鉴于任意SQL查询未排序,您需要以某种方式指定要使其工作的排序,这与您尝试制作(*)的通用解决方案并不真正“兼容”。 / p>
建议的方法是这样的(假设变量@PageSize
包含每页的项目数,并且@Page
为您要检索的页面的基于1的索引:< / p>
WITH NumberedQuery AS (
SELECT ROW_NUMBER() OVER (ORDER BY q.SomeColumn) ix, q.*
FROM QueryToPage q
)
SELECT nq.*
FROM NumberedQuery nq
WHERE (nq.ix >= (@Page-1)*@PageSize) AND (nq.ix < @Page*@PageSize);
(*):使用连接SQL代码的方法有几个问题,它会阻止使用参数化查询,它会增加SQL注入的风险,会损害性能,如果订单未指定,则无法解决手头的问题。