Tsql 在SELECT中调用用户定义的函数,也使用WHERE中的值,我不想调用该函数两次

Tsql 在SELECT中调用用户定义的函数,也使用WHERE中的值,我不想调用该函数两次,tsql,select,where,Tsql,Select,Where,使用TSQL,如何通过最初在SELECT子句中调用用户定义函数,然后在WHERE子句中引用结果,从该函数中获取值?我已尝试为结果创建别名,但它无法解析名称 SELECT C.dbo.myFunction(n.first, n.last) AS result, <other columns> FROM C.dbo.Names AS n, <other tables> WHERE result > 10 AND <other conditions> 我这样

使用TSQL,如何通过最初在SELECT子句中调用用户定义函数,然后在WHERE子句中引用结果,从该函数中获取值?我已尝试为结果创建别名,但它无法解析名称

SELECT C.dbo.myFunction(n.first, n.last) AS result, <other columns>
FROM C.dbo.Names AS n, <other tables>
WHERE result > 10 AND <other conditions>

我这样做对吗

不能在WHERE子句中使用列别名。您可以尝试以下操作:

SELECT s.*
FROM 
    (SELECT C.dbo.myFunction(n.first, n.last) AS result, <other columns>
    FROM C.dbo.Names AS n, <other tables>) s
WHERE s.result > 10 AND <other conditions>

正如其他人提到的,您不能在Where子句中使用别名。但是,您可以使用通用表表达式:

With CTE AS 
(SELECT C.dbo.myFunction(n.first, n.last) AS result, <other columns>
FROM C.dbo.Names AS n, <other tables> )

SELECT * FROM CTE WHERE result > 10;

上SELECT语句的See逻辑处理顺序可能重复。在选择“谢谢你”之前会发生什么?不信者Damien_,这很好地提醒了我为什么这不是一个有效的方法。@MarcinJuraszek,谢谢你,除了你的答案外,这个链接也很有帮助。