Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server动态复杂查询的分页_Sql Server - Fatal编程技术网

Sql server SQL Server动态复杂查询的分页

Sql server SQL Server动态复杂查询的分页,sql-server,Sql Server,我找不到一种简单的方法来为SQL server的复杂查询进行分页。我需要编写一个函数,将sql查询作为参数。这个查询可以包括子查询、按语句排序、分组等,并检索特定的结果页面。在oracle中,用另一个select语句封装这样的查询很容易,但对于SQL server,我找不到任何类似的方法。我想要避免的是解析输入SQL语句。我在SQLServer2005中使用SQLServer2005分页,向上分页最好通过排名函数完成。但是,考虑到任意SQL查询是未排序的,您需要以某种方式指定该查询的排序方式,这

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

分页,向上分页最好通过排名函数完成。但是,考虑到任意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注入的风险,影响性能,如果顺序未指定,则无法解决当前问题