是否可以连接表值函数和另一个带参数的表

时间:2010-05-26 21:03:59

标签: sql-server-2005

感兴趣的人的快速背景,

我有一个主详细信息表(选项日期),每个主记录大约有20个详细信息。我们保存数据的oltp系统为我们保存的每条新信息做了21次插入。这是杀死服务器,所以我试图通过用逗号分隔值代替详细信息表来实现这一点。一切似乎都在起作用,除了我可以弄清楚如何获取细节表。我正在尝试使用表值函数,但它并没有完全正常工作。

我想打电话给

Select Top 100 *
FROM dbo.fn_MarketDataDetails (MarketDataMasterID) mdd
INNER JOIN MarketDataMaster mdm on mdm.MarketDataMasterID = mdd.MarketDataMasterID

显然,这只是不编译。

我可以跑

Select Top 100 *
FROM dbo.fn_MarketDataDetails (15425) // Assuming 15425 is a valid MarketDataMasterID

然后我找回了一张看起来像旧细节表的桌子。

这甚至可能吗?我有意义吗?

1 个答案:

答案 0 :(得分:33)

APPLY运算符应该这样做:

SELECT *
 from MarketDataMaster
 cross apply dbo.fn_MarketDataDetails (MarketDataMasterID)

这实际上是从MarketDataMaster返回的每行调用一次函数。 “cross apply”的工作方式类似于内部联接,因为只返回函数返回数据的行;使用“外部应用”来实现类似于左外连接的功能。