为什么说RowId是我的CTE查询中的无效列



我有一个基于一些在线示例编写的CTE查询,不确定为什么我得到关于RowId的错误:

DECLARE @StartRow INT
DECLARE @EndRow INT
SET @StartRow = 120
SET @EndRow = 140
;WITH MyCTE AS
(
    SELECT 
        c1, c2, c3,
        ROW_NUMBER() OVER(ORDER BY gav.c1) AS RowId
    FROM 
        MyTable1 gav
)
SELECT *
FROM MyTable1 
WHERE RowId > @StartRow
  AND RowId < @EndRow
ORDER BY c1

我得到这个错误:

留言207,16层,1州,15行
列名"RowId"无效。
207号电话,16层,州1,16线
列名'RowId'无效。

在我看到的每个例子中,他们在查询中引用CTE的RowId值,但由于某种原因,它似乎不在范围内?

问题是你正在使用表名的名称时,它应该是CTE的名称

DECLARE @StartRow INT
DECLARE @EndRow INT
SET @StartRow = 120
SET @EndRow = 140
;WITH MyCTE AS
(
    SELECT c1, c2, c3,
    ROW_NUMBER() OVER(ORDER BY gav.c1) AS RowId
    FROM MyTable1 gav
)
SELECT *
FROM MyCTE     --------------- <<=== HERE
WHERE   RowId > @StartRow
        AND RowId < @EndRow
ORDER BY c1

最新更新