SQL Server 多筆 Upsert 語法(新增或更新)

INSERT 或 UPDATE ,簡稱 Upsert 。最近有個需求是要將 A 資料表的內容倒入 B 資料表, Upsert 這時候就派上用場了! 如果指定欄位相同就更新,找不到就新增。只是平常看到的解法都只能一筆一筆,這次使用 MERGE 實現多筆 Upsert ,特此紀錄。

範例資料表:
    
create table users
(
    user_id   int           not null,
    user_name nvarchar(100) not null,
)
    

多筆大量 Upsert 語法:
    
MERGE INTO users AS target
USING (VALUES (1, N'小明'),
              (2, N'老王'),
              (3, N'大華'),
              (4, N'阿梅'),
              (5, N'老吳')
       ) AS source (user_id, user_name)
ON target.user_id = source.user_id
WHEN MATCHED THEN
    UPDATE
    SET target.user_name = source.user_name
WHEN NOT MATCHED THEN
    INSERT (user_id, user_name)
    VALUES (source.user_id, source.user_name);
    

留言