0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQLServer UPSERT

Posted at

「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句は、一致するレコードがターゲットテーブルに存在しない場合に新しいレコードを挿入します。

Reference

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?