都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

MERGE 文

 最近、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 );

以外と知らない人が多いので、記事にしてみました。