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