1

たとえば、20行を取得するクエリを実行しています。21あるかどうか知りたいので、それに応じて[次のページ]ボタンを有効にできます。現時点では、pageSize + 1を取得し、ブール値をoutパラメータとして返しています。このパラメータには、21行(この場合)が取得されたかどうかに基づいた値が割り当てられていますが、実際には20行のみがリストとして返されます。これは、余分なものを取得していることを意味しますが、パフォーマンスには理想的ではないものを無視します。これはまったく別のクエリであるため、count(*)を実行したくありません。

注:pageddatasourceを使用することは実際にはオプションではなく、rowlimitと開始行に固執する必要があります。

提案をありがとう。

4

6 に答える 6

2

2つのクエリ:

  1. 結果のページ
  2. 次に結果の総数

最初のクエリにはページとページサイズが含まれ、2番目のクエリには行の総数が表示されます。この情報を使用して、総ページ数を計算し、これをユーザーに提示できます。

于 2012-06-26T12:23:18.493 に答える
1
  1. 一度のカウント(*)を取得します。ページ数を表示するために使用します。
  2. ユーザーがページ番号をクリックするたびに、20レコードを取得します
于 2012-06-26T12:30:58.363 に答える
1

同じDBアクセス内で1つの余分な行(21対20)を取得することは、パフォーマンスの観点からは無視できないことではないかと思います。

于 2012-06-26T12:25:51.027 に答える
1

次のようなネストされたクエリを使用できます。

 select    TOP 20 *,
           (select count(*) from tableName) as TotalCount
 from      tableName

次に、各行に合計列があるので、それを確認できます。

または、ネストされた選択を避けて、この構文を使用することもできます。これは、追加の述語がある場合に便利になります(ネストされた選択で繰り返す必要はありません)。

 select    TOP 20 *, count(*) over() as TotalCount
 from      tableName
于 2012-06-26T12:26:15.220 に答える
0

これを試して

Select *,Row_Number .... as RowNo
into #Table
from Table

Select * 
from #Table
WHERE RowNo > @FirstRec AND RowNo < @LastRec

Select count(*)
from #Table
于 2012-06-26T12:29:32.313 に答える
0

これがrow_numberを使用するものです

–-Change these two variable to parameters of your
–-actual stored procedure

Declare @PageNumber int
Declare @PageSize int


–-Assume we need page 6 i.e. records from 51-60
Select @PageNumber=6
Select @PageSize=10


–-Select only those records which
–-fit into a single page
Select Top(@PageSize) * from
(
Select
RowID=ROW_NUMBER() OVER (ORDER BY Name),
ProductID,Name,ProductNumber,ListPrice,
TotalRows=Count(*) OVER() --Count all records
from Production.Product
) A
Where A.RowId > ((@PageNumber-1)*@PageSize)
于 2012-06-26T12:36:24.603 に答える