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
列名 'RowId' が無効です。

私が見たすべての例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 に答える