我有一个表值函数,它返回一个表。当我尝试使用另一个表JOIN
表值函数时,我没有得到任何结果,但是当我将函数的结果复制到一个实际的表中并进行相同的连接时,我得到了预期的结果。
查询看起来像这样:
Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....
所有我有大约4个这样的查询,每个查询都有不同的功能,但所有的功能都产生相同的表,但数据不同。对于其中一些查询,INNER JOIN
可以正常工作,但对于其他查询则不然。
有人建议为什么会这样吗?
答案 0 :(得分:62)
使用表值函数,您通常使用Cross Apply
。
Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)
答案 1 :(得分:1)
如果我们做了一些假设,表值函数的参数不依赖于myTable列,那么这将是有效的。
SELECT *
FROM myTable
INNER JOIN
(SELECT * from fn_function(@para1, @para2 etc))
ON ...
但是如果params依赖于myTable它将无效
答案 2 :(得分:1)
我认为这应该有用
Select *
From Animals
Join dbo.AnimalsTypesIds(900343)
As AnimalsTypes
On AnimalsTypes.TypeId = Animals.TypeId
在表值函数中,返回表应该具有 TypeId ,以便join对该子句起作用
答案 3 :(得分:0)
加入的“ON”子句很可能不正确。也许像
这样的小错字加入x ON oID = odID
而不是
加入x ON oID = oID