SQL中的分页,如何在where子句中使用行号?

Paging in SQL, how to use row number in where clause?

我试图在 SELECT 查询的 where 子句中使用 MSSQL 的行号(在存储过程中),但是它不允许我在 where 子句中引用该列。你通常会怎么处理这样的事情?

我正在尝试以下方法(无效):

SELECT ROW_NUMBER() OVER(ORDER BY [dtd]) AS row_num, [data]
FROM dbo.Reports INNER JOIN dbo.Types
WITH (NOLOCK)
ON dbo.Reports.type = dbo.Types.id
WHERE [dbo].[Reports].[Id] = @Id AND (row_num < (@page - 1) * 30) AND (row_num > @page * 30)
ORDER BY [dtd] DESC

您可以使用 CTE:

WITH CTE AS
(
   SELECT ROW_NUMBER() OVER(ORDER BY [dtd]) AS row_num, [data]
    FROM dbo.Reports INNER JOIN dbo.Types
    WITH (NOLOCK)
    ON dbo.Reports.type = dbo.Types.id
    WHERE [dbo].[Reports].[Id] = @Id 
)
SELECT * FROM CTE 
WHERE (row_num < (@page - 1) * 30) AND (row_num > @page * 30)
ORDER BY [dtd] DESC