最近、SS,PS 工程レビュー等をやっていて気付いたことなんですが、テーブルの更新時に、SELECT 文を投げて、WHERE 句の条件にヒットしたら UPDATE、ヒットしなければ INSERT を発行するといったロジックをよく見かけます。上記の内容だと、SELECT を FOR UPDATE でロックをかけておくなど考慮することが多くなってしまいます。このようなロジックには、MERGE 文を使用するのは非常に便利です。SQLServer 2008 から対応されています。
※SQLQuality の 松本崇博さんのブログが参考になります。
MERGE INTO t1 USING t2 ON t1.a = t2.a WHEN MATCHED THEN UPDATE SET t1.b = t2.b WHEN NOT MATCHED THEN INSERT VALUES ( t2.a, t2.b );
以外と知らない人が多いので、記事にしてみました。