2009-03-31 13 views
0

誰かが助けてくれますか?SQL Server 2005のデータページングは​​1行しか返さない

SQL Server 2005のデータページングのストアドプロシージャ(下記参照)があります。ストアドプロシージャの目的は、特定のカテゴリ(CatID)のProducts(prodid、description)のページを返すことです。私は正常に動作し同様のストアドプロシージャを有する

@HowManyProducts: 10034 

:それだけ多くの製品が存在するにもかかわらず、1(1)行を返す

EXEC @return_value = [dbo].[ecosys_CNET_GetCategoryProducts] 
@CatID = N'AA', 
@PageNumber = 1, 
@ProductsPerPage = 10, 
@HowManyProducts = @HowManyProducts OUTPUT 

Iは、ストアドプロシージャを実行します小さなデータセットの場合私は何らかの制限を打つのですか?

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
go 

CREATE PROCEDURE [dbo].[ecosys_CNET_GetCategoryProducts] 

( 
@CatID char(2), 
@PageNumber INT, 
@ProductsPerPage INT, 
@HowManyProducts INT OUTPUT 
) 

AS 

-- Declare a new @Products TABLE variable. 
DECLARE @Products TABLE 
( 
RowNumber INT, 
prodid VARCHAR(40), 
description VARCHAR(2000) 
) 

-- Populate the @Product TABLE variable with the selected Products. 
INSERT INTO @Products 

SELECT 

ROW_NUMBER() OVER (ORDER BY cds_atr.prodid), 
cds_atr.prodid, 
cds_stdnee.description 

FROM cds_stdnee 

JOIN cds_atr 
ON (cds_stdnee.prodid = cds_atr.prodid) 

WHERE cds_atr.catid = @CatID 

-- Return the Total Number of Products using an OUTPUT variable. 
SELECT @HowManyProducts = COUNT(prodid) FROM @Products 

-- Extract the Requested Page of Products. 
SELECT DISTINCT prodid, description 

FROM @Products 

WHERE RowNumber > (@PageNumber - 1) * @ProductsPerPage 
    AND RowNumber <= @PageNumber * @ProductsPerPage 

答えて

1

1つの行だけを返す場合、返す行は1つだけです。 SELECT * FROM @Productsを追加して、そこにどの行が表示されているか確認してください。特に、行番号を見てください。

+0

ありがとうジョン。私はあなたが示唆したことをして、クエリが10の同一の製品に戻ることを発見しました。 DISTINCTは1ページあたり1プロダクトに減少しました。私はDISTINCTを確実にするためにDISTINCTをROW_NUMBER句に移動する必要があると思います。私はどうすればそれを助言することができますか? –

+0

私は、グループを使用する代わりに、DISTINCTの:OVER INSERT INTO @products SELECT ROW_NUMBER()(cds_atr.prodid BY ORDER)、 cds_atr.prodid、cds_stdnee FROM cds_stdnee.description は(cds_stdnee ON cds_atr JOIN。 prodid = cds_atr.prodid) どこcds_atr.catid = @CatID GROUP BY cds_atr.prodid、cds_stdnee.description –

関連する問題