「DBにないデータだけ登録して」と言われたときに使う(-ω-)/
UPSERT
SQL ServerでUPSERT操作を行う一般的な方法は、MERGEステートメントを使用することです。UPSERTは、データが既に存在する場合は更新(UPDATE)し、存在しない場合は挿入(INSERT)する操作を指します。
MERGE
users
テーブルへのUPSERT操作例
ここでは、usersテーブルに対してidをキーとして使用し、該当するidがテーブルに存在する場合はnameを更新し、存在しない場合は新しいレコードを挿入します。
MERGE INTO users AS target
USING (VALUES (@id, @name)) AS source (id, name)
ON (target.id = source.id)
WHEN MATCHED THEN
UPDATE SET name = source.name
WHEN NOT MATCHED BY TARGET THEN
INSERT (id, name) VALUES (source.id, source.name);
まずUSING
句でソースとして使用する値を指定します。
ここでは、変数@id
と@name
から成る1行のデータをソースとしています。
ON
句でusers
テーブルのid
とソースのid
を比較し、
一致するかどうかに基づいて次の操作を決定します。
WHEN MATCHED
句は、一致するレコードが見つかった場合に実行され、name
を更新します。
WHEN NOT MATCHED BY TARGET
句は、一致するレコードがターゲットテーブルに存在しない場合に新しいレコードを挿入します。