HOME >> Tips >> SQL Server Tips >> SQL

条件が一致する場合はUPDATE、一致しない場合はINSERTを実行する(MERGE)

 
文書番号:20346




SQL Server 2008 から MERGER ステートメントを使用することができるようになりました。
2つのテーブルを比較し、条件にした項目が一致する場合はUPDATE、一致しない場合はINSERTを1文で実行できます。


【SQL】


MERGE TAB_A
USING TAB_B
ON  TAB_A.Column1 = TAB_B.Column1
WHEN MATCHED THEN
    UPDATE
    SET TAB_A.Value1 = TAB_B.Vaue1
       ,TAB_A.Value2 = TAB_B.Vaue2
WHEN NOT MATCHED THEN
    INSERT (
         Column1
        ,Value1
        ,Value2
    )
    VALUES (
         TAB_B.Column1
        ,TAB_B.Value1
        ,TAB_B.Value2
    );
  ・バインド変数などを使用して値を更新する場合には以下のようにも書けます。

MERGE TAB_A
USING (SELECT @KEY1 AS キー1
             ,@KEY2 AS キー2
) TAB_B
ON  TAB_A.Column1 = TAB_B.キー1
AND TAB_A.Column2 = TAB_B.キー2
WHEN MATCHED THEN
    UPDATE
    SET TAB_A.Value1 = @VAL_1
       ,TAB_A.Value2 = @VAL_2
WHEN NOT MATCHED THEN
    INSERT (
         Column1
        ,Column2
        ,Value1
        ,Value2
    )
    VALUES (
         TAB_B.キー1
        ,TAB_B.キー2
        ,@VAL_1
        ,@VAL_2
    );
※MERGE ステートメントは必ず最後に;(セミコロン)を指定します。
指定しないと以下のエラーになります。
===========================================================
メッセージ 10713、レベル 15、状態 1、行 17
MERGE ステートメントは、セミコロン (;) で終わる必要があります。
===========================================================