111*_*110 1 sql t-sql sql-server stored-procedures sql-server-2008
我从按降序日期排序的项目数据库列表中获取.
我使用ROW_NUMBER()函数来获得50个50项.
我第一次需要从1-50到51-100等项目.
我有数据库项目类型1,这些是我得到的项目.
数据库中有数千个这样的项目.
因此,当我第一次调用存储过程时,我将它传递给第一个(下一个项目的数字为50).
所以这应该给我带回前50项.现在我添加到where子句RowNum < 1+50但是从查询中得到的行号是:35,37,38,43,44,45,55,67等等,所以我的存储过程只返回来自的项目35 to 45.我想我在查询中做了一些愚蠢的错过,但找不到它.
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY Products.CreatedOnDate DESC ) AS RowNum, Products.*
FROM Products
WHERE Products.CreatedOnDate <= GETDATE()
) AS RowConstrainedResult
WHERE RowNum >= 1
AND RowNum < 1+50 -- here I use parameter but currently I hardcode '1'
AND ProductTypeId = 1
ORDER BY RowNum
Run Code Online (Sandbox Code Playgroud)
你正在过滤,ProductTypeID但内部查询与Row_Number不:
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY Products.CreatedOnDate DESC ) AS RowNum
, Products.*
FROM Products
WHERE Products.CreatedOnDate <= GETDATE()
AND ProductTypeId = 1
) AS RowConstrainedResult
WHERE RowNum >= 1
AND RowNum < 1+50
ORDER BY RowNum
Run Code Online (Sandbox Code Playgroud)