在具有十亿行业务逻辑的两个表之间加入

时间:2013-01-09 09:36:47

标签: sql sql-server sql-server-2008 join sql-update

我有像这样的源和表目标表

Source:

    Column1 Column2 Column3 Column4

Destination:

    Column1 Column2 Column5 Column6

如何在SQL SERVER中实现此逻辑

IF SOURCE.Column1 = DESTINATION.Column1 AND SOURCE.Column2 = DESTINATION.Column2
UPDATE DESTINATION Column5 = SOURCE.Column1 + 12 (some other logic)
ELSE
Do something else

问题是,我必须处理十亿行,那么实现上述逻辑的最佳方法是什么

EDIT1

IF SOURCE.Column1 = DESTINATION.Column1 AND SOURCE.Column2 = DESTINATION.Column2
UPDATE DESTINATION Column5 = SOURCE.Column1 + 12 (some other logic)
ELSE
**INSERT SOURCE table row to the destination**

如何使用merge语句实现相同的功能,因为我只需要考虑两列

1 个答案:

答案 0 :(得分:1)

<击> 您UPDATE JOIN UPDATE d SET d.Column5 = CASE WHEN some logic THEN s.Column1 + 12 (some other logic) ELSE Something else ELSE FROM DESTINATION d LEFT JOIN SOURCE s ON s.Column2 = d.Colcumn2; ,在您的情况下,性能会更好。像这样:

MERGE INTO SOURCE AS TGT
USING DESTINATION AS SRC
  ON TGT.Column1 = SRC.Column1 
WHEN MATCHED THEN
  UPDATE SET
    TGT.Column5 = SRC.Column1 + 12 (some other logic)
WHEN NOT MATCHED THEN
  INSERT (Source columns list)
  VALUES (...);

<击>


您可以使用MERGE语句,如下所示:

INSERT

请注意:

  • INTO TableName语句中没有MERGE,因为目标表的名称已在SOURCE子句中定义,即SOURCE AS TGT。这就是我定义DESTINATION AS SRCMERGE

  • 的原因
  • 必须以分号结束{{1}}语句。最佳做法是使用al sql语句。