MERGEステートメント

SQL Server 2008からの新機能。
(Oracleには前からあった)

MERGE table1
USING table2
ON (
    table1.field1 = table2.field1
)
WHEN MATCHED THEN
    UPDATE
    SET table1.field2 = table2.field1
WHEN NOT MATCHED THEN
    INSERT (
        field1,
        field2
    )
    VALUES (
        table2.field1,
        table2.field2
    );
  • 「マッチしないときだけ追加」したい場合はWHEN MATCHED THENのブロックをなくせばよい(逆の場合はNOTの方)
  • INSERT句をの追加先フィールド名をテーブル名で修飾すると下記のようなエラーが出る。

メッセージ 10739、レベル 15、状態 1、行 14
MERGE ステートメントで使用される INSERT 列リストに、マルチパート識別子を含めることはできません。代わりに、シングルパート識別子を使用してください。