【问题标题】:How do I perform server side paging in SQL Server 2005 [closed]如何在 SQL Server 2005 中执行服务器端分页 [关闭]
【发布时间】:2012-05-12 11:18:29
【问题描述】:

我需要能够使用 SQL 从表中选择特定范围的行。

我应该使用什么 TSQL 命令来执行服务器端分页?

我不考虑服务器端分页? 我想从表中选择前 10 行并进行一些计算

cmd.commandText :="select top 10 from table "
ada.fill(dt)
for each(datarow dtr in dt.rows)
{
//calulation
}

然后我想选择接下来的 10 行并同样重复直到表格结束

【问题讨论】:

  • 表中没有id字段
  • 看看Top和Skip关键字...
  • 所以这实际上是关于 batches 而不是分页。您可能需要考虑直接在 SQL Server 内部执行这种处理,而不是将数据提取到您的应用程序中。考虑到您获取的行可能在您的应用中处理它们时发生了变化。

标签: c# sql sql-server sql-server-2005


【解决方案1】:

Microsoft 在 SQL Server 2005 中引入了 ROW_NUMBER() 来帮助进行分页...

SELECT * FROM (     
  SELECT          
  ROW_NUMBER() OVER (ORDER BY City) AS row, *  
  FROM Cities  
) AS a WHERE row BETWEEN 1 AND 10

使用 1 和 10 的变量来动态获取下一组。

create proc dbo.whatever_select_paging
  @int page
as

SELECT * FROM (     
  SELECT          
  ROW_NUMBER() OVER (ORDER BY City) AS row, *  
  FROM Cities  
) AS a WHERE row BETWEEN ((@page-1) * 10) +1 AND (@page * 10)-1

go

【讨论】:

  • 不,我的问题发生了什么变化?谁换了管理员?
  • @eldhose - 乔希编辑了它,因为它不清楚。他似乎确实删除了所有提及C# 或您希望在他的修订版中处理 200 万行的事实。您到底在做什么,需要使用C# 分批处理 200 万行,每批 10 行?
  • 不只是一个例子,我在我的表中告诉 10 220000 行,我想在一个循环中处理这些所有数据
  • 无论如何...您仍然需要 SQL 分页。在 C# 中跟踪您所在的页面,继续处理直到记录数少于 10。
  • @ChrisGessler - 这对于处理更高的批次可能非常低效。如果 OP 共享他们的表结构和这样做的原因,可能会有更好的方法。
【解决方案2】:

您应该使用 ROW_NUMBER 来完成此操作。查看 link 以了解 ROW_NUMBER 在分页中的使用情况。

【讨论】:

  • 我以前看过这个,但我不知道如何在 c# 中做到这一点
【解决方案3】:
SELECT TOP 20 FROM MyData
WHERE orderNum <= 61
ORDER BY orderNum DESC

这将获得从第 61 行到第 80 行的 20 行(如果您有重复的 orderNum 值,则可以获得超过 20 行)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多