トップページに戻る    次のSQLServerのサンプルへ    前のSQLServerのサンプルへ

3-2 merge文

SQLパズル

MasterT
ID  Val
--  ------
 1  吉法師
 2  竹千代
 3  牛若丸

MasterTに下記の内容をmerge(あれば更新、なければinsert)する。
MasterTのプライマリキーはID列とする。

mergeする内容
ID  Val
--  --------
 3  源義経
 4  明智光秀

更新結果
ID  Val
--  ------
 1  吉法師
 2  竹千代
 3  源義経
 4  明智光秀


データ作成スクリプト

create table MasterT(
ID  int,
Val VarChar(10));

insert into MasterT values(1,'吉法師'),
                          (2,'竹千代'),
                          (3,'牛若丸')
go


SQL

merge into MasterT a
using (select 3 as ID,'源義経' as Val union all
       select 4      ,'明智光秀') b
on (a.ID = b.ID)
when matched then
update set a.Val = b.Val
when not matched then
insert (ID,Val)
values (b.ID,b.Val);
go


解説

SQL2003のmerge文が、SQLServer2008以降ではサポートされてます。
MSDN --- merge文