2013-02-26 78 views
0

我有脚本化基于一些网上的例子一个CTE查询,不知道为什么我收到有关rowid的一个错误:为什么说我的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
Invalid column name 'RowId'.
Msg 207, Level 16, State 1, Line 16
Invalid column name 'RowId'.

在每例如我见过,他们在查询中引用了CTE中的RowId值,但由于某种原因,它似乎不在范围内?

回答

8

问题是你正在使用的表名的名字时,它应该是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 
名称