列名SQL Server 2012无效

Raf*_*per 3 sql t-sql sql-server sql-server-2012

RowssWHERE条款中使用name我该怎么办?

SELECT TOP 10 
    ROW_NUMBER() OVER(ORDER BY dp.IdPytanie) AS Rowss,
    dp.IdPytanie
    ,dp.SpecjalnePytanie
 FROM dodajtemat_pytanie dp
 WHERE 
    (@RowBegining = 0 OR convert(int,Rowss) >= @RowBegining)
    AND (@RowEnd = 0 OR Rowss <= @RowEnd)
Run Code Online (Sandbox Code Playgroud)

错误 在此输入图像描述

这项工作 - >

 @RowEnd = 0 OR ROW_NUMBER() OVER(ORDER BY dp.IdPytanie) <= @RowEnd
Run Code Online (Sandbox Code Playgroud)

Mah*_*mal 7

使用子查询或CTE如下:

WITH CTE
AS
(
    SELECT 
      ROW_NUMBER() OVER(ORDER BY dp.IdPytanie) AS Rowss,
      dp.IdPytanie,
      dp.SpecjalnePytanie
    FROM dodajtemat_pytanie dp
)
SELECT *
FROM CTE
WHERE (@RowBegining = 0 OR Rowss >= @RowBegining)
  AND (@RowEnd      = 0 OR Rowss <= @RowEnd);
Run Code Online (Sandbox Code Playgroud)

WHERE语句在语句之前进行逻辑评估SELECT,因此它无法识别新创建的别名Rowss.

有关SQL Server中逻辑查询处理步骤的详细信息,请参阅:

  • @Rafael-JuniorMVCDeveloper是什么让你这么想的? (2认同)
  • @ Rafael-JuniorMVCDeveloper为什么你认为CTE的优化程度与你最初编写的查询不同(如果这是合法的语法)? (2认同)