Merge文


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表から取得するようにしてやればよい。