Sql server 2005 是否可以将一个表值函数与另一个带参数的表连接起来
为感兴趣的人提供快速背景 我有一个主细节表(选项日期),每个主记录大约有20个细节。我们保存数据的oltp系统为我们保存的每一条新信息进行了21次插入。这会杀死服务器,所以我试图通过用逗号分隔的值替换details表来实现这一点。一切似乎都正常,除了我能想出如何取回明细表。我尝试使用表值函数,但它不太有效 我想打个电话Sql server 2005 是否可以将一个表值函数与另一个带参数的表连接起来,sql-server-2005,Sql Server 2005,为感兴趣的人提供快速背景 我有一个主细节表(选项日期),每个主记录大约有20个细节。我们保存数据的oltp系统为我们保存的每一条新信息进行了21次插入。这会杀死服务器,所以我试图通过用逗号分隔的值替换details表来实现这一点。一切似乎都正常,除了我能想出如何取回明细表。我尝试使用表值函数,但它不太有效 我想打个电话 Select Top 100 * FROM dbo.fn_MarketDataDetails (MarketDataMasterID) mdd INNER JOIN Market
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
我得到了一张和我以前的明细表相似的表
这可能吗?我说得通吗?应用操作符应该执行以下操作:
SELECT *
from MarketDataMaster
cross apply dbo.fn_MarketDataDetails (MarketDataMasterID)
这实际上是从MarketDataMaster返回的每行调用函数一次。
“交叉应用”的工作原理类似于内部联接,即只返回函数返回数据的行;对于类似于左外部联接的功能,请使用“外部应用”。我不清楚您在哪里执行此操作-在CLR或TSQL?TSQL中。如果我在主记录中阅读,我可以用C#轻松地完成这项工作,但如果可能的话,我希望用TSQL完成。谢谢你的回答。交叉应用在处理海量数据时会降低性能。有没有替代方案?没有人回答这个问题。一些声音片段:(1)识别被调用查询执行的功能,并将其直接应用到查询中。(2) 多语句表值函数(如果有begin/end块)可能特别可怕,请不惜一切代价避免它们。(3) 将查询分解为一系列查询,可能会在此过程中填充临时表。此“交叉应用”可能在SQL SERVER 2005上被禁用?!我正在尝试这样做,但得到的结果是“附近的语法不正确”。“在SQLServer2005中添加了交叉和外部应用程序,因此可能存在某种形式的语法错误。把它作为一个新问题发布,肯定会很快得到回答。