Tsql 在SELECT中调用用户定义的函数,也使用WHERE中的值,我不想调用该函数两次
使用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> 我这样
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,谢谢你,除了你的答案外,这个链接也很有帮助。