Sql server 具有表值函数的内部联接不工作

Sql server 具有表值函数的内部联接不工作,sql-server,function,tsql,sql-function,Sql Server,Function,Tsql,Sql Function,我有一个返回表的表值函数。当我尝试将表值函数与另一个表进行连接时,我没有得到任何结果,但当我将函数的结果复制到实际表中并进行相同的连接时,我会得到预期的结果 查询如下所示: Select * From myTable INNER JOIN fn_function(@parm1, @param2) ON .... 我总共有4个这样的查询,每个查询都有略微不同的函数,但所有函数都生成相同的表,但数据不同。对于其中一些查询,内部联接有效,但对于其他查询则无效 有什么建议说明为什么会发生这种情况吗?对

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

查询如下所示:

Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....
我总共有4个这样的查询,每个查询都有略微不同的函数,但所有函数都生成相同的表,但数据不同。对于其中一些查询,
内部联接
有效,但对于其他查询则无效


有什么建议说明为什么会发生这种情况吗?

对于通常使用的表值函数
交叉应用

Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)

如果我们假设表值函数的参数不动态地依赖于myTable列,这将起作用

   SELECT *
    FROM myTable 
    INNER JOIN

    (SELECT * from fn_function(@para1, @para2 etc))
 ON ...
但是,如果参数依赖于myTable,那么它将不起作用

连接的“on”子句很可能不正确。也许是一个小小的打字错误

在oID=odID上连接x

而不是

在oID=oID上连接x


我认为这应该行得通

  Select * 
    From Animals 
    Join dbo.AnimalsTypesIds(900343) 
      As AnimalsTypes
      On AnimalsTypes.TypeId = Animals.TypeId

在表值函数中,返回表应该具有TypeId,这样只有当您希望将外部查询中的内容作为参数传递到函数中时,join才会对该子句起作用。OP的情况并非如此,但此函数需要参数。那么,我应该用连接列替换参数吗?如果这些列是相同的,那么可以。@AnupAgrawal-OP可以用于两个密切相关的术语,根据我的经验-原始帖子(被问的问题)或原始海报(问问题的人)。通常情况下,您可以从上下文中推断出该函数的含义,甚至可能与该函数的含义无关。@AnupAgrawal交叉应用函数将导致对外部select中的每一行执行一次该函数,而不是加入该函数,该函数只执行一次。你不能把这两个都换了。OP代表“原始海报”。可能与不匹配的数据类型有关。你能给我们看一些真实的代码吗?示例数据和sql FIDLE会很有用。请给出准确的查询以帮助我们。它应该会起作用。我通常会给函数提供一个别名,如
内部连接fn_函数(@param1,@param2)fn ON…
精确查询将有助于找到解决方案。这并不能真正回答问题:您只是展示了一种更详细的方式来表达相同的结果,没有解释如何解决参数是否依赖于
myTable
的每一行的问题。请为我更正答案。