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

时间:2014-05-01 05:04:37

标签: sql-server function tsql sql-function

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

查询看起来像这样:

Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....

所有我有大约4个这样的查询,每个查询都有不同的功能,但所有的功能都产生相同的表,但数据不同。对于其中一些查询,INNER JOIN可以正常工作,但对于其他查询则不然。

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

4 个答案:

答案 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