kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

merge文で単一のテーブルにレコードがあれば更新、なければ追加する

docs.microsoft.com

T-SQLでのmergeするときのサンプルは複数のテーブルを使ったものばかり出てくるので、単一テーブルで「レコードがあれば更新、なければ追加」する際の自分用のメモ。ProductテーブルのIDはユニークなキーとなっているとします。

create table Product(
  ID int not null,
  Name nvarchar(128),
  Price Decimal(10,2),
  RegisterDate Date
)

merge Product as P
using (select 123 as [ID], 'Apple' as Name, 100.00 as Price, '2021/12/26' as RegisterDate) as s
on p.ID = s.ID
when matched then 
  update set p.Price = 200, 
  p.RegisterDate = CAST( GETDATE() AS Date ) 
when not matched then 
  insert values (123, 'Apple', 100.00, '2021/12/26');