페이지 매김을 설정할 수 있도록 데이터베이스의 총 레코드 수를 반환하고 싶습니다. SQL Server 2008에서 다음 페이징 메서드를 사용할 때 DB에있는 총 레코드 수를 반환하려면 어떻게합니까?ROW_NUMBER를 사용할 때 SQL 서버에서 총 레코드를 반환하십시오.
ALTER PROCEDURE [dbo].[Nop_LoadAllOptimized]
(
@PageSize int = 20,
@PageNumber int = 1,
@WarehouseCombinationID int = 1,
@CategoryId int = 58,
@OrderBy int = 0,
@TotalRecords int = null OUTPUT
)
AS
BEGIN
WITH Paging AS (
SELECT rn = (ROW_NUMBER() OVER (
ORDER BY
CASE WHEN @OrderBy = 0 AND @CategoryID IS NOT NULL AND @CategoryID > 0
THEN pcm.DisplayOrder END ASC,
CASE WHEN @OrderBy = 0
THEN p.[Name] END ASC,
CASE WHEN @OrderBy = 5
THEN p.[Name] END ASC,
CASE WHEN @OrderBy = 10
THEN wpv.Price END ASC,
CASE WHEN @OrderBy = 15
THEN wpv.Price END DESC,
CASE WHEN @OrderBy = 20
THEN wpv.Price END DESC,
CASE WHEN @OrderBy = 25
THEN wpv.UnitPrice END ASC
)), p.*, pcm.DisplayOrder, wpv.Price, wpv.UnitPrice FROM Nop_Product p
INNER JOIN Nop_Product_Category_Mapping pcm ON p.ProductID=pcm.ProductID
INNER JOIN Nop_ProductVariant pv ON p.ProductID = pv.ProductID
INNER JOIN Nop_ProductVariant_Warehouse_Mapping wpv ON pv.ProductVariantID = wpv.ProductVariantID
WHERE pcm.CategoryID = @CategoryId AND (wpv.Published = 1 AND pv.Published = 1 AND p.Published = 1 AND p.Deleted = 0)
AND wpv.WarehouseID IN (select WarehouseID from Nop_WarehouseCombination where UserWarehouseCombinationID = @WarehouseCombinationID)
)
SELECT TOP (@PageSize) * FROM Paging PG
WHERE PG.rn > (@PageNumber * @PageSize) - @PageSize
SET @TotalRecords = @@ROWCOUNT
END
[row_number를 사용하여 쿼리에서 @@ rowcount를 가져 오는 효율적인 방법] (http://stackoverflow.com/questions/1038506/efficient-way-of-getting-rowcount-from-a-query-using-row -number/4383164 # 4383164) –
@Martin thats 내가 뭘보고 있었는지는하지만 총 행 수를 반환하는 방법을 말해주지 않습니까? – izip
내 의견을 편집하고 링크를 변경했습니다. 어떤 링크를 언급하고 있습니까? SQLServerCentral 하나 또는 StackOverflow 하나? BTW이 내용을 다루는 것은 [SQL Server Central article 2 부] (http://www.sqlservercentral.com/articles/paging/70120/)입니다. –