私はカスタムDALで作業しており、自動結果ページネーションを扱っています。 (それはもちろん、回避可能だ場合、ウェル)私はページ付けのために私たちのフィルタ機能、また特殊な機能に追加のパラメータを追加したくないROW_NUM()OVER(ORDER BY xxxxx)を使用せずにSQL Serverでクエリにページを設定できますか?
Model.All() --> generates "select * from mytable"
Model.Filter ("[email protected]", "arg0value") --> generates "select * from mytable where [email protected]"
...
:DALは次のように、私たちのモデルに基づいた動的なクエリを生成します。代わりに、私はの前にのクエリを変更した結果にページを分けて実行したいと思います。何かのように...
var resultset = Model.Filter ("[email protected], "arg0value"); // "select * from mytable where [email protected]"
resulset = resultset.Paginate (1, 25); // this should paginate the query before loading any objects
Oracleでは、ROWNUM疑似列を使用して古いクエリをラップするのは簡単です。
select * from (my old sql) where rownum between 20 and 40
Sql Server(2005)では、ROWNUMのようなものはありません。私はROW_NUMBER関数があるのを見ましたが、 "OVER(ORDER BY xxxx)"節を渡す必要があるので、クエリの内部を知る必要があります。
select row_number() over (order By <?????>) as rownum, dv.* from (my old sql) as dv where rownum between 20 and 40
私たちのモデルに特定のパラメータ/機能を追加せずにSql Serverでこれを実行する方法はありますか?
ありがとうございます!
編集
@Demsは、私は、クエリを解析し、出力フィールドに基づいていますが、BY ORDERを追加することができ、言うように:まず、私は構文解析のオーバーヘッドをしたい、と第二ませんが、もしクエリが "select *"型の場合、フィールドを抽出できません。独自のデータアクセス層を書いている、とあなたが(むしろそれの内部よりも)のみ、クエリの出力フィールド名を知っている()ROW_NUMBERを適用したい場合は
、 [OFFSET AND FETCH NEXT]が表示されます(http://www.kodyaz.com/sql-server-2012/sql-paging-in-sql-server-2012-sql-order-by-offset-fetch-next- rows.aspx) - それまでは、 'ROW_NUMBER()'のCTEがあなたの唯一の実用的な選択肢です... –