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?
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)
如果您使用的是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)
| 归档时间: |
|
| 查看次数: |
4555 次 |
| 最近记录: |