如何在MS SQL Server中使用表函数连接结果?

如何在MS SQL Server中使用表函数连接结果?,sql,sql-server,function,join,Sql,Sql Server,Function,Join,我有两个类似的表(但实际有数百万行): 我必须将一个表的多行详细信息汇总到另一个表的一行项目,以便在网格视图中显示它们,如下所示: | items.X | items.Y | details.A | details.B | --------------------------------------------- | 1 | 2 | a, c | b, d | | 3 | 4 | e, g | f, h |

我有两个类似的表(但实际有数百万行):

我必须将一个表的多行
详细信息
汇总到另一个表的一行
项目
,以便在网格视图中显示它们,如下所示:

| items.X | items.Y | details.A | details.B |
---------------------------------------------
| 1       | 2       | a, c      | b, d      |
| 3       | 4       | e, g      | f, h      |
---------------------------------------------
我已经阅读并了解了相关问题,但不允许在客户系统上安装。因为我没有机会以本机方式执行此操作,所以我创建了一个存储函数(允许我创建),它返回一个包含
X
a
B
列的表。到目前为止,该函数运行良好,但我似乎没有将这些列添加到结果集中

目前,我正试图通过查询
,将函数结果连接起来,连接条件将是上述示例中的
X
-列。我用AdventureWorks2012数据库做了一个简单的例子,它包含一个表函数
dbo.ufnGetContactInformation(@PersonID INT)
,用于连接
BusinessEntityID
上的
[Person].[EmailAddress]
表:

SELECT
    [EmailAddress]
    -- , p.[FirstName]
    -- , p.[LastName]
FROM
    [Person].[EmailAddress] e
INNER JOIN
    dbo.ufnGetContactInformation(e.[BusinessEntityID]) p
    ON p.[PersonID] = e.[BusinessEntityID]
2条注释行表示我在实际中尝试执行的操作,但如果未注释,则隐藏了我得到的实际错误:

Event 4104, Level 16, Status 1, Line 6
The multi-part identifier 'e.BusinessEntityID' could not be bound.
我理解,在加入过程中,
e.[BusinessEntityID]
还没有任何价值。因此,我无法使用函数参数在函数中选择特定子集,这应该在联接条件中。此外,我不能让函数返回所有行或创建临时表,因为在我的特定情况下,这在时间和空间方面都非常缓慢和昂贵

有没有其他方法可以通过两个现有表和一个表函数实现类似的功能?

使用Apply

交叉应用类似于内部连接,外部应用类似于左连接

SELECT
    [EmailAddress]
    -- , p.[FirstName]
    -- , p.[LastName]
FROM
    [Person].[EmailAddress] e
cross apply
    dbo.ufnGetContactInformation(e.[BusinessEntityID]) p

谢谢这正是我要找的。
SELECT
    [EmailAddress]
    -- , p.[FirstName]
    -- , p.[LastName]
FROM
    [Person].[EmailAddress] e
cross apply
    dbo.ufnGetContactInformation(e.[BusinessEntityID]) p