我有一个基于一些在线示例编写的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
我收到此错误:
Msg 207,Level 16,State 1,Line 15
列名称'RowId'无效。
Msg 207,Level 16,State 1,Line 16
列名称'RowId'无效。
在我看到的每个例子中,他们在查询中引用CTE中的RowId
值,但由于某种原因它似乎不在范围内?
答案 0 :(得分: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