如何在merge语句中设置和计算变量

时间:2016-12-23 14:12:36

标签: sql sql-server tsql

正如标题所说,我想知道如何在merge语句中计算和设置变量。如果可能的话。

示例:

MERGE TABLE_1 as target
USING TABLE_2 as source
ON (target.USER_ID = source.USER_ID)
WHEN NOT MATCHED THEN
    INSERT (
         USER_ID,
         CURRENT_CALCULATION,
         CURRENT_CALCULATION_VALUE )
    VALUES (
         source.USER_ID,
         SET @CURRENT_CALCULATION = (select value from table3 where table3.USER_ID = source.USER_ID),
         ... REUSE @CURRENT_CALCULATION for other purposes ...
         );

我尝试过不同类型的语法但似乎没有一种方法可行。

2 个答案:

答案 0 :(得分:0)

我不相信这是可能的。如果没有更多细节,我无法确定这是否适合您的情况,但如何在MERGE声明之前简单地执行此逻辑?如果您要避免的是两次击中相同的表,那么您可以在执行所有计算时将所有内容转储到临时表中。

如果你这样做,你可以简单地使用临时表作为合并的源 - 你甚至可能不需要将它放入变量中,因为你可以将它包含在临时表的列中。

答案 1 :(得分:0)

将逻辑移至Merge source 部分并重复使用

MERGE TABLE_1 AS target
USING (SELECT t2.*,
              t3.value
       FROM   TABLE_2 t2
              LEFT JOIN table3 t3
                     ON t3.USER_ID = t2.USER_ID) AS source
ON ( target.USER_ID = source.USER_ID )
WHEN NOT MATCHED THEN
  INSERT ( USER_ID,
           CURRENT_CALCULATION,
           CURRENT_CALCULATION_VALUE )
  VALUES ( source.USER_ID,
           source.value,
           source.value + some logic ); 

考虑到table 2table 3之间存在 1:1 关系,具体取决于您correlated sub-query用于查找@CURRENT_CALCULATION