Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的分页,如何在where子句中使用行号?_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

SQL中的分页,如何在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查询的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:

您可以使用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