sql-server - 为什么我的结果不一致?

标签 sql-server stored-procedures common-table-expression

我正在处理以下存储过程。我注意到,每五次或六次刷新结果时,都会有新值。考虑到数据处于静态环境并且此时没有人对数据进行任何更改,我真的无法理解。有人可以告诉我为什么即使我使用完全相同的参数运行此过程也会看到不同的结果。我什至在查询分析器中尝试过它,但仍然看到同样奇怪的结果。

我正在 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

最佳答案

如果您在 OrderedItems 临时表定义中放置 order by 子句,您可能会得到一致的结果。

关于sql-server - 为什么我的结果不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3826701/

相关文章:

sql-server - 比较来自参数的两个日期的条件,如果满足则添加

sql-server - SQL Server - DECLARE SET 执行起来比在 where 条件下硬编码参数花费太多时间

sql - 子文件夹中文件的累计数量

php - 在 CI + SQL Server 中检查更新查询结果

sql - 在数据库重构期间映射 ids 的最简单方法

sql-server - T-SQL如何仅在其他值实际更改时设置没有触发器的修改日期

sql - 在 PostgreSQL 的 RECURSIVE WITH 内部使用 WITH

sql - 按别名分组

sql - <> "~"在SQL中是什么意思

sql - 在不影响数据库的情况下测试存储过程