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

2つの列だけを考慮する必要があるため、mergeステートメントで同じことを実装するにはどうすればよいですか

4

1 に答える 1

1

あなたはできますUPDATEJOIN、あなたの場合はよりパフォーマンスが向上します。そのようです:

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 TGTしたのはそのためDESTINATION AS SRCです。

  • MERGEセミコロンでステートメントを終了することは必須です。また、すべての sql ステートメントでこれを行うのがベスト プラクティスです。

于 2013-01-09T09:40:23.363 に答える