1

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

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

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

编辑1

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**

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

4

1 回答 1

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像这样使用该语句:

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 (...);

注意:

  • 语句中INSERT没有INTO TableName,因为子句中已经定义了目标表的名称MERGE,即SOURCE. 这就是我定义SOURCE AS TGTand的原因DESTINATION AS SRC

  • 语句必须以MERGE分号结束。最好使用 al sql 语句来执行此操作。

于 2013-01-09T09:40:23.363 回答