SQL中的分页,如何在where子句中使用行号?
我试图在存储过程中的SELECT查询的where子句中使用MSSQL中的行号,但是它不允许我在where子句中引用该列。你通常怎么做这种事 我正在尝试以下不起作用的方法:SQL中的分页,如何在where子句中使用行号?,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我试图在存储过程中的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].[Repo
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:
您可以使用CTE:
您可以使用CTE:
您可以使用CTE:
我还没有听说过CTE,我会尝试一下,如果它有效的话,我一定会阅读它们!我还没有听说过CTE,我会尝试一下,如果它有效的话,我一定会阅读它们!我还没有听说过CTE,我会尝试一下,如果它有效的话,我一定会阅读它们!我还没有听说过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