我正在尝试在SQL Server上执行以下SQL命令:
select a1,
a2,
....
(select [dbo].[myFunction](a1, a2)) as mySelector
where mySelector = @sel
错误消息显示:无效的列名mySelector
我也试过“as'mySelector'” - 相同的错误信息
任何想法为什么?
谢谢,
ZB
答案 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子句。请注意 实际的物理执行 语句由查询确定 处理器和订单可能会有所不同 这个清单。
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- WITH CUBE或WITH ROLLUP
- HAVING
- 选择
- DISTINCT
- ORDER BY
- TOP
醇>