下面是我当前的SQL。
Insert into [dbo].[XYZ]
select col1,col2,
(select colValue from parsedData([ParameterizedValue]) where [Name] = 'Some Value') AS col3,
(select colValue from parsedData([ParameterizedValue]) where [Name] = 'Some Value') AS col4,
(select colValue from parsedData([ParameterizedValue]) where [Name] = 'Some Value') AS col5 from [dbo].[ABC]
此语句重复调用parsedData
函数。并且表ABC拥有数百万条记录。
因此,存在用于保存parsedData
结果的任何SQL,因此parsedData
仅被调用一次,而不是多次。
答案 0 :(得分:0)
您可以进行交叉申请(或外部申请)。
CROSS APPLY是相关子查询的替代方法,也可以用于“联接功能”。我没有一个很好的例子,但是这里有一些希望有用的链接:
答案 1 :(得分:0)
您可以这样做:
Insert into [dbo].[XYZ]
select abc.col1, abc.col2, p.col3, p.col4, p.col5
from [dbo].ABC abc outer apply
(select max(case when name = 'value1' then colvalue end) as col3,
max(case when name = 'value2' then colvalue end) as col4,
max(case when name = 'value3' then colvalue end) as col5
from parsedData(abc.ParameterizedValue) p
) p;
这应该为您节省对同一数据的多次分析。