1

SQLServer データベースに、ほぼ 100K のレコードを含むテーブルと、これらの行のページ化された gridView プレゼンテーションを表示する Web アプリケーションがあります。明らかに、行をフィルター処理し、それらの小さなサブセットをクライアントに返す必要があります (Web での Ajax パフォーマンスのため)。

これが私の主な問題です。真ん中の行を選択する最善の方法は何ですか? たとえば、#50000 から #50010 までの行を選択するにはどうすればよいですか? テーブルの行の真ん中から行を選択するような方法はありますselect top 10か。select bottom 10

私は .NET MVC Web アプリケーションで linq2sql を使用しています & SQL StoredProcedures をコーディングすることもできます。

任意の提案をいただければ幸いです。

4

4 に答える 4

6

これについてはよくわかりませんが、とにかく

SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY colm) RowNumr, colm FROM table) t
WHERE RowNumr BETWEEN 50000 AND 50010
于 2013-01-23T09:53:23.463 に答える
5

これLinq2Sqlはそれほど難しいことではありません。以下を使用できます。

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

Scott Guthrie がこの問題について投稿しており、さらに説明があります。そして、Linq2Sql実際に を使用して sql を生成しROW_NUMBER()ます。

ちょっとしたヒントですが、式の順序は重要です。

  • .Where()
  • .Select()
  • .OrderBy()
  • .Skip()
  • .Take()
于 2013-01-23T09:54:50.957 に答える
1

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

このリンクを確認してください。行番号を使用して、並べ替え順序に基づいて必要な行を取得できます。行番号がページング制限の間にあるwhere句を追加するだけです。

于 2013-01-23T09:50:20.197 に答える
1

これを試して:

select * 
from(select table_name.*,rownum as rn from table_name order by column desc) table_name
where rn between 5000 and 5010;
于 2015-07-07T06:10:58.627 に答える