【问题标题】:How to create t-sql to load next n-amount of records?如何创建 t-sql 来加载下一个 n 条记录?
【发布时间】:2011-08-30 02:12:07
【问题描述】:

我需要一个创建 t-sql 查询以加载下 10 条记录的示例(取决于网格中的默认行数)。

相同类型的 linq 必须跳过行。

例如,我有 100K 的结果,我只需要加载 100 到 110 条记录之间的 10 条,依此类推。这个想法是让它页面加载非常快

我还需要为我的网格构建分页,所以我需要知道总共有多少条记录

【问题讨论】:

  • 有无数关于分页的 SO 问题——如果我知道您使用的是什么数据库,我会找到一个重复的。
  • @OMG Ponies:我认为 t-sql 意味着 ms sql server。
  • @zespri:Sybase 也支持 TSQL ;) 但是是的,SQL Server 是我愿意投资的。

标签: c# sql sql-server tsql pagination


【解决方案1】:

在 MS SQL 2005/2008 中,您可以执行类似的操作

with cte
as
(
    select row_number() over (order by ID) RowNumber, *
    from MyTable
) 
select *
from cte
where RowNumber between 10 and 20

[编辑] 带总数列

select *
from
(
    select
        row_number() over (order by ID) RowNumber, 
        count(*) over() TotalRowCount,
        *
    from MyTable
) tt
where RowNumber between 10 and 20

【讨论】:

  • Alex 我可以在同一个查询中返回总行数吗?
【解决方案2】:

试试这个

SELECT YourColumn1, YourColumn2, RN
FROM
(
   SELECT YourTable1.*, ROW_NUMBER() OVER (ORDER BY YourTable1PK) RN
   FROM YourTable1
) sq
 WHERE sq.rn BETWEEN 10 AND 20

【讨论】:

  • 我可以在同一个查询中返回总行数吗?
  • 是的,您可以返回总行数。
【解决方案3】:

您可以使用这样的查询。只要您在 Records.Id 列上有索引,它就应该很快。

select *
from 
    (select
        row_number() over (order by Id) as [RowNum],
        count(*) over() as [TotalCount],
        Id from @Records) as R
where
    [RowNum] between @StartRow and (@StartRow + @PageSize)

查看 MSDN 以了解有关 ROW_NUMBER() 函数的更多信息。

【讨论】:

  • Chris 我可以在此查询中返回总行数吗?
  • 是的,您可以添加 COUNT(*) 作为聚合窗口函数。
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多