感兴趣的人的快速背景,
我有一个主详细信息表(选项日期),每个主记录大约有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
然后我找回了一张看起来像旧细节表的桌子。
这甚至可能吗?我有意义吗?
答案 0 :(得分:33)
APPLY运算符应该这样做:
SELECT *
from MarketDataMaster
cross apply dbo.fn_MarketDataDetails (MarketDataMasterID)
这实际上是从MarketDataMaster返回的每行调用一次函数。 “cross apply”的工作方式类似于内部联接,因为只返回函数返回数据的行;使用“外部应用”来实现类似于左外连接的功能。