Sql Server 2008からの新機能。(oracleは9iからサポート)
以下、変数を使用したサンプル。
declare @wk_year char(4) = '2009' declare @wk_name char(10) = '商品D' declare @wk_money numeric = 666 MERGE hoge --更新を行う表を指定 Using (select '' as dammy) as source --表を元としたくなかったのでダミーを記述 On (hoge.year = @wk_year and hoge.name = @wk_name) When Matched Then --データが存在した場合の処理 Update Set hoge.money = @wk_money When Not Matched Then --データが存在しなかった場合の処理 INSERT (year,name,money) Values (@wk_year,@wk_name,@wk_money);
今回はUsingでテーブルを指定しなかったが、
テーブルを指定した場合、対象となった件数分、更新処理が行われる。
oracle の場合はUsingをDUAL表から取得するようにしてやればよい。