1

我有一个基于一些在线示例编写的 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 行
无效的列名称“行 ID”。

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

4

1 回答 1

9

问题是您使用的是表名的名称,而它应该是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
于 2013-02-26T15:38:59.083 回答