23

ページングとともにレコードの総数を取得する必要があります。現在、SQL Server 2012 で以下のように実行しています。これには、カウントを取得するための別のクエリが必要です。SQL Server 2012 で改善された方法はありますか?

ALTER PROCEDURE dbo.tpGetPageRecords
(
    @OffSetRowNo INT,     
    @FetchRowNo INT,
    @TotalCount INT OUT
) 
AS 

SELECT CSTNO, CSTABBR 
FROM DBATABC
WHERE CSTABBR LIKE 'A%'
ORDER BY CSTNO
OFFSET ( @OffSetRowNo-1 ) * @FetchRowNo ROWS
FETCH NEXT @FetchRowNo ROWS ONLY

SET @TotalCount = 
(SELECT COUNT(*)
FROM DBATABC
WHERE CSTABBR LIKE 'A%')


GO
4

1 に答える 1

52

契約の変更が許可されている場合、次のことができます。

SELECT CSTNO, CSTABBR,COUNT(*) OVER () as TotalCount
FROM DBATABC
WHERE CSTABBR LIKE 'A%'
ORDER BY CSTNO
OFFSET ( @OffSetRowNo-1 ) * @FetchRowNo ROWS
FETCH NEXT @FetchRowNo ROWS ONLY

これで、合計が結果セットの別の列として利用できるようになります。OUT残念ながら、この同じステートメントでこの値を変数に割り当てる方法がないため、パラメーターとして提供することはできなくなりました。

これはOVERGROUP(2005 年以降使用可能) を使用して、 ingを必要とせずに (無制限の) 結果セット全体にわたって集計を計算できるようにします。

于 2013-08-08T06:54:22.533 に答える