使用with和Cross Apply语句进行更新

时间:2019-01-23 18:58:44

标签: sql-server function tsql sql-update cross-apply

我有这段代码,它将给定订单和季节的价格提高了perf_type/zone_no

在我的原始代码中,我将@season_no作为局部单个变量。这神奇地工作。

UPDATE p
SET price = x.Price
FROM #Prices p
with 
CROSS APPLY  
(
    SELECT * 
    FROM dbo.LFT_GET_PRICES_Seasonal(@season_no, order_dt) udf
    WHERE udf.perf_type = p.perf_type AND udf.zone_no = p.zone_no
) x

现在,我们正在尝试修改代码以在多个季节使用。我们的代码前面有这段代码。

select season_no from @season_table

我不确定如何合并两者。

with season_alias as (select season_no from @season_table) 

但是我不知道如何合并两者。如何将@season_table中与每个订单相对应的唯一的season_no传递给交叉应用函数。我可以那样做吗?

我需要做的是用@season_no中的select语句替换@season_table独立的单个局部变量,我不确定该怎么做。

我无法调整功能,不适用于该项目

1 个答案:

答案 0 :(得分:0)

您没有提供足够具体的信息,但是我可以告诉您,您通常可以使用相关子查询来替换它:

FROM dbo.LFT_GET_PRICES_Seasonal(@season_no, order_dt) udf

具有这样的内容:

FROM dbo.LFT_GET_PRICES_Seasonal((SELECT TOP 1 season_no FROM @season_table WHERE something=somethingelse), order_dt) udf