2011-06-22 6 views
2

大きなレコードセットでサーバー側をページングするためにストアドプロシージャを使用します ストアドプロシージャは非常に複雑なwhere句を持っています。SQLページネーションは、ページング前にレコードの総数を返します

UI上でその番号を視覚化できるようにするには、ページ番号を付ける前にレコードの総量が必要です。

これを行う最良の方法は何ですか?

私は

ALTER PROCEDURE [Schema].[ReturnRecords] 
@PageSize int = 20, 
@StartIndex int = 0 
AS 
SELECT * FROM 
(
    SELECT *, TOP(COUNT(e._ROWID) OVER()) 
    FROM TABLE_NAME 
    WHERE Column=1 AND Column1=2 AND Column2=2 AND Column3=2 AND Column4=2 
) AS X 
WHERE X.RowNum BETWEEN @StartIndex AND (@StartIndex + @PageSize) 

をやっている現時点ではそのレコードの私の最後の列は、改ページの前にレコードの合計額が含まれています。

代替は

私は大好きだ...、内側のクエリで一時テーブルを作成 その後、レコードをカウントし、一時テーブルを返しますが、それはそれを行うための良い方法のように見えないことですストアドプロシージャの出力パラメータとしてレコードの総数を返す

何か考えていますか?

答えて

4

カウントを取得するために2番目のクエリを実行すると、より効率的な戦略になることがよくあります。 performance comparisons of various approaches hereを参照してください。

+1

本当に?記事を読むには、そのウェブサイトにアカウントを作成する必要がありますか?私はdownvoteに誘惑されていますが、実際には記事を読んでいないので、おそらく公正ではありません。 – Jonathan

+0

@ジョナサン、これを試してください:[bugmenot](http://bugmenot.com/view/sqlservercentral.com) – oluckyman

+0

@ luckyman - ありがとう。私が知る限り、SSCはあなたにナーグ画面を却下させ、とにかく記事を読むことを許可していました。彼らはその方針を変えたように見えますが、私はそれについてまだできていません。私はここで記事を再現することはできません。 –

関連する問題