【SQLServer】UPDATE/INSERTを使い分ける(MERGE INTO)

テストテーブル作成

SQL
--テストテーブル作成
create table #test
(
 [number] int,
 [score] int
)

--テストデータ挿入
insert into 
	#test 
values	
	(1,20),
	(2,48),
	(3,87)

コード例

MERGE INTOは通常、単体テーブルで使用するものではありませんが、
仮表([b])を使うことで、単一テーブルでもMERGE INTOを使うことができます。

SQL
MERGE INTO
	#test as [a]
USING
	(select null as n) as [b] --仮表
ON
	([a].[number]= 4)
--一致
when matched then
	update set [score] = 82
--不一致
when not matched then
	INSERT ([number],[score]) Values(4,90);
1回目の実行結果はnumber=4のレコードがないため、INSERTが実行されます。
number	score
1	20
2	48
3	87
4	90
2回目の実行結果はnumber=4のレコードがあるため、UPDATEが実行されます。
number	score
1	20
2	48
3	87
4	82