具有表值函数的INNER JOIN不起作用

use*_*837 33 t-sql sql-server function sql-function

我有一个表值函数返回一个表.当我尝试JOIN使用另一个表的表值函数时,我没有得到任何结果,但是当我将函数的结果复制到一个实际的表并执行相同的连接时,我得到了预期的结果.

查询看起来像这样:

Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....
Run Code Online (Sandbox Code Playgroud)

总而言之,我有大约4个这样的查询,每个查询的功能略有不同,但所有函数都生成相同的表但数据不同.对于其中一些查询的INNER JOIN作品,但对于其他人则没有.

有人建议为什么会这样吗?

Anu*_*wal 66

使用表值函数,您通常使用Cross Apply.

Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)
Run Code Online (Sandbox Code Playgroud)

  • 仅当您要将外部查询中的内容作为参数传递给函数时.OP的情况并非如此. (4认同)
  • @AnupAgrawal交叉应用函数将导致它对外部选择中的每一行执行一次,而不是加入它,它只执行一次.你不能只是切换这两个.OP代表"原创海报". (4认同)