SQL Server - WHERE子句中的“AS”选项

时间:2013-10-29 20:38:24

标签: sql sql-server where

我正在尝试在SQL Server上执行以下SQL命令:

   select a1, 
           a2,
    ....
            (select [dbo].[myFunction](a1, a2)) as mySelector
    where mySelector = @sel    

错误消息显示:无效的列名mySelector

我也试过“as'mySelector'” - 相同的错误信息

任何想法为什么?

谢谢,

ZB

1 个答案:

答案 0 :(得分:3)

如果您需要过滤函数的结果并使用别名,那么您将需要查看使用子查询:

select a1, a2, mySelector
from
(
   select a1, 
           a2,
    ....
            (select [dbo].[myFunction](a1, a2)) as mySelector
   from yourtable
) d
where mySelector = @sel;

您在SELECT列表中使用的别名在WHERE子句中不可用。来自MSDN: Logical Processing Order of the SELECT statement

  

以下步骤显示逻辑   处理订单或绑定订单,   对于SELECT语句。这个命令   确定何时定义对象   一步到位了   后续步骤中的条款。对于   例如,如果查询处理器可以   绑定(访问)表或视图   这些在FROM子句中定义   对象及其列已制作完成   可用于所有后续步骤。   相反,因为SELECT子句   是第8步,任何列别名或   该子句中定义的派生列   不能通过前面引用   条款。但是,他们可以   由后续条款引用   作为ORDER BY子句。请注意   实际的物理执行   语句由查询确定   处理器和订单可能会有所不同   这个清单。

     
      
  1. FROM
  2.   
  3. ON
  4.   
  5. JOIN
  6.   
  7. WHERE
  8.   
  9. GROUP BY
  10.   
  11. WITH CUBE或WITH ROLLUP
  12.   
  13. HAVING
  14.   
  15. 选择
  16.   
  17. DISTINCT
  18.   
  19. ORDER BY
  20.   
  21. TOP
  22.