在sql中选择中间行

时间:2013-01-23 09:45:29

标签: sql linq-to-sql datagrid

我的SQLServer数据库中有一个表,里面有几乎100K的记录,还有一个Web应用程序,我想在其中显示这些行的分页gridView表示。显然,我应该过滤行并将其中的一小部分返回给客户端(因为Web上的Ajax性能)。

这是我的主要问题。选择中间行的最佳方法是什么?例如,如何选择#50000到#50010的行?有没有像select top 10select bottom 10这样的方法从表格行的中间选择行。

我在.NET MVC Web应用程序中使用linq2sql&也可以编写SQL StoredProcedures。

任何建议都将受到赞赏。

4 个答案:

答案 0 :(得分:5)

对此不确定,但无论如何

SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY colm) RowNumr, colm FROM table) t
WHERE RowNumr BETWEEN 50000 AND 50010

答案 1 :(得分:5)

Linq2Sql中,这并不难。您可以使用:

dataContext.GetTable()
    .Skip(50000)
    .Take(10)
    .ToList();

Scott Guthrie has a post关于此事,有更多解释。 Linq2Sql实际上会使用ROW_NUMBER()生成sql。

一些小提示,你的表达顺序很重要:

  • .Where()
  • .Select()
  • .OrderBy()
  • .Skip()
  • .Take()

答案 2 :(得分:1)

http://msdn.microsoft.com/en-us/library/ms186734.aspx

检查此链接,您可以使用行号根据排序顺序获取所需的行。只需添加一个where子句,其中行号在您的分页限制之间。

答案 3 :(得分:1)

试试这个:

select * 
from(select table_name.*,rownum as rn from table_name order by column desc) table_name
where rn between 5000 and 5010;