Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 是否可以将一个表值函数与另一个带参数的表连接起来_Sql Server 2005 - Fatal编程技术网

Sql server 2005 是否可以将一个表值函数与另一个带参数的表连接起来

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

为感兴趣的人提供快速背景

我有一个主细节表(选项日期),每个主记录大约有20个细节。我们保存数据的oltp系统为我们保存的每一条新信息进行了21次插入。这会杀死服务器,所以我试图通过用逗号分隔的值替换details表来实现这一点。一切似乎都正常,除了我能想出如何取回明细表。我尝试使用表值函数,但它不太有效

我想打个电话

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中添加了交叉和外部应用程序,因此可能存在某种形式的语法错误。把它作为一个新问题发布,肯定会很快得到回答。