作为UDF结果的列的Where子句

Gzi*_*zim 4 sql t-sql sql-server select

我有一个用户定义的函数(例如myUDF(a,b))返回一个整数.

我试图确保只调用此函数一次,其结果可以用作WHERE子句中的条件:

SELECT col1, col2, col3, 
       myUDF(col1,col2) AS X
From myTable
WHERE x>0
Run Code Online (Sandbox Code Playgroud)

SQL Server尝试检测x为列,但它实际上是计算值的别名.

如何重新编写此查询,以便可以对计算值进行过滤而无需多次执行UDF?

Baa*_*aju 7

With Tbl AS 
(SELECT col1, col2, col3, myUDF(col1,col2) AS X  
        From table myTable  )

SELECT * FROM Tbl WHERE X > 0
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 5

如果您使用的是SQL Server 2005及更高版本,则可以使用"交叉应用":

Select T.col1, T.col2, FuncResult.X
From Table As T
    Cross Apply ( Select myUdf(T.col1, T.col2) As X ) As FuncResult
Where FuncResult.X > 0
Run Code Online (Sandbox Code Playgroud)