私が取り組んでいる次のストアドプロシージャがあります。結果を 5 回または 6 回更新するたびに、新しい値が含まれていることに気付きました。データが静的な環境にあり、現時点で誰もデータに変更を加えていないことを考えると、私には本当に理解できません。まったく同じパラメーターでこの手順を実行しているにもかかわらず、なぜ異なる結果が表示されるのかについて、誰かが教えてください。クエリ アナライザーで試してみましたが、同じ奇妙な結果が表示されます。
私はSql 2008で実行しています。
手順は次のとおりです。
ALTER PROCEDURE [dbo].[SelectSearchBy_Category]
@userId INT,
@page INT,
@results INT,
@category NVARCHAR(50),
@searchTerm NVARCHAR(200) = NULL
AS
BEGIN
SET NOCOUNT ON
SET ROWCOUNT @results
DECLARE @categoryId INT
IF (@category IS NOT NULL) BEGIN
SET @categoryId = ( SELECT categoryId FROM Category WHERE categoryDescription = @category )
END
DECLARE @rowEnd INT
DECLARE @rowStart INT
SET @rowEnd = (@page * @results)
SET @rowStart = @rowEnd - @results
;WITH OrderedItems AS
(
SELECT
i.itemId,
title,
i.[description],
i.url,
i.categoryId,
i.ratingId,
i.requirements,
ISNULL(i.rating, 0) AS tating,
ISNULL(i.raters, 0) AS raters,
i.urlFriendlyPath,
ROW_NUMBER() OVER
(
ORDER BY i.dateAdded, (ISNULL(i.rating, 0) * ISNULL(i.raters, 0))
) AS RowNumber
FROM
[dbo].[Item] i
LEFT JOIN
UserItemIgnore uii ON uii.itemId = i.itemId AND uii.userId = @userId
INNER JOIN
ItemLanguage il ON il.itemId = i.itemId
WHERE
(@searchTerm IS NULL OR a.title LIKE '%' + @searchTerm + '%') AND
i.categoryId = @categoryId AND
il.languageId = 1 AND
uii.itemId IS NULL
)
SELECT *
FROM OrderedItems
WHERE RowNumber BETWEEN @rowStart AND @rowEnd
END