Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 对表分页并获取行计数_Sql_Sql Server 2008 - Fatal编程技术网

Sql 对表分页并获取行计数

Sql 对表分页并获取行计数,sql,sql-server-2008,Sql,Sql Server 2008,下面的查询从表中获取从第10行开始到第20行结束的行的子集。此外,要保存查询,我需要返回表中的总行数。这是我能想到的最好的解决办法。有没有更有效/优雅的方法?特别是,我不喜欢按1划分的部分 select * from (select count(*) over (partition by 1) as [count], row_number() over (order by [Name],[Description]) as [row], *

下面的查询从表中获取从第10行开始到第20行结束的行的子集。此外,要保存查询,我需要返回表中的总行数。这是我能想到的最好的解决办法。有没有更有效/优雅的方法?特别是,我不喜欢按1划分的
部分

select *
from (select count(*) over (partition by 1) as [count],
             row_number() over (order by [Name],[Description]) as [row],
             *
      from [Products]) as t
where row between 10 and 20

如果你不喜欢它,就把它拿走

select *
from (select count(*) over () as [count],
             row_number() over (order by [Name],[Description]) as [row],
             *
      from [Products]) as t
where row between 10 and 20
然而,撇开这一点不谈,这个查询并不是最优的。你应该用传统的方法数数

select *
from (select count(*) as [count]
        from [Products]) X
cross join (
    select row_number() over (order by [Name],[Description]) as [row],
           *
      from [Products]) as t
where row between 10 and 20
您可以将这两者放在一起,然后按Ctrl-M,然后执行。这些计划看起来将大不相同