ページングとともにレコードの総数を取得する必要があります。現在、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
契約の変更が許可されている場合は、次のことが可能です。
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
パラメーターとして提供することはできません。
これは OVER
句 (2005年から利用可能)を使用して、GROUP
ingを必要とせずに、(無制限の)結果セット全体に対して集計を計算できるようにします。