在表格的每条记录上调用 TVF 并连接结果

Posted

技术标签:

【中文标题】在表格的每条记录上调用 TVF 并连接结果【英文标题】:Call TVF on every record of a table and concat results 【发布时间】:2010-10-21 11:30:32 【问题描述】:

我认为这一定很明显,但我想不通。

假设有一个表 tblData 有一个列 ID 和一个表值函数 (_tvf),它以 ID 作为参数。我需要tblData 中所有 ID 的结果。

但是:

SELECT * FROM tblData data 
INNER JOIN dbo._tvf(data.ID) AS tvfData
   ON data.ID = tvfData.ID

给我一​​个错误:The multi-part identifier "data.ID" could not be bound

将所有 ID 传递给此 TVF 并连接结果的正确方法是什么?

谢谢

【问题讨论】:

【参考方案1】:

我认为您可能需要在这里使用 CROSS APPLY 而不是内部联接:

SELECT * 
FROM dbo.tblData data 
CROSS APPLY dbo._tvf(data.ID) AS tvfData

这将为基表的每个data.ID 调用 TVF 函数,并将结果连接到基表的列。

在此处查看资源:

Using CROSS APPLY in SQL Server Understanding APPLY clause in SQL Server Using T-SQL CROSS APPLY and OUTER APPLY

【讨论】:

不幸的是,我收到“在语句完成之前已用尽最大递归 100”错误。因为这是另一个问题,也许你也可以在那里帮助我。 ***.com/questions/3986240/… 我必须在调用 ITVF 的选择语句的末尾应用一个 OPTION (MAXRECURSION 0)。现在可以了,再次感谢。

以上是关于在表格的每条记录上调用 TVF 并连接结果的主要内容,如果未能解决你的问题,请参考以下文章

上)

上)

上)

使用mysql_fetch_row()函数逐行获取结果集中的每条记录

如何将 LINQ 左外连接限制为一行

连接一个控制源产生#Type!错误