0

我找不到一种简单的方法来为 SQL 服务器的复杂查询进行分页。我需要编写将 sql 查询作为参数的函数(此查询可以包括子查询、按语句排序、分组等)并检索特定页面的结果。在 oracle 中,通过用另一个 select 语句封装这样的查询很容易,但是对于 SQL 服务器,我找不到任何类似的方法。我想避免的是解析输入 SQL 语句。我正在使用 SQL Server 2005

4

1 回答 1

2

SQL Server 2005 及更高版本中的分页最好通过排名函数来完成。但是,鉴于任意 SQL 查询是未排序的,您需要以某种方式指定排序方式才能使其工作,这与您尝试制作的通用解决方案并不真正“兼容”(*)。

建议的方法是这样的(假设变量@PageSize具有每页的项目数,并且@Page作为要检索的页面的基于 1 的索引):

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 注入的风险,它损害了性能,如果未指定顺序,它无法解决手头的问题。

于 2012-09-13T13:30:21.827 回答