111*_*110 2 sql t-sql database sql-server row-number
我使用ROW_NUMBER()函数从数据库表中获取50个50项.
@From参数是从中开始抓取50行的行.(第一次为1的是51101151等)
我传递参数@CityId到存储过程,如果第一行60中的数据库是cityId=1与cityId = 2是在排61这个存储过程不返回结果.
但是,如果我通过@From参数51而不是返回结果.我在这里做错了什么?
SELECT RowConstrainedResult.*
FROM ( SELECT ROW_NUMBER() OVER
( ORDER BY f.ItemCreatedOnDate DESC ) AS RowNum,
f.*
FROM (
SELECT
t.ItemIdId,
t.ItemTypeId,
t.CreatedOnDate as ItemCreatedOnDate,
t.CityId as CityId
FROM dbo.Items as t
) f) AS RowConstrainedResult
WHERE RowNum >= @From
AND RowNum < @From + 50
AND CityId = @CityId
Run Code Online (Sandbox Code Playgroud)
在您的版本中,ROW_NUMBER()枚举所有行.将谓词移动cityid到最里面的选择,并且ROW_NUMBER()只枚举行所在的位置cityid = 2.
SELECT RowConstrainedResult.*
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY f.ItemCreatedOnDate DESC) AS RowNum,
f.*
FROM (
SELECT t.ItemIdId,
t.ItemTypeId,
t.CreatedOnDate as ItemCreatedOnDate,
t.CityId as CityId
FROM dbo.Items AS t
WHERE CityId = @CityId
) AS f
) AS RowConstrainedResult
WHERE RowNum >= @From AND
RowNum < @From + 50
Run Code Online (Sandbox Code Playgroud)