MERGE ステートメント(UPSERT)

SQL Server 2008 からは、MERGE ステートメントがサポートされました。MERGE ステートメントは、データが存在する場合には UPDATE を、存在しない場合には INSERT 処理が行えるステートメントなので、UPSERT とも呼ばれています(UPDATE と INSERT を組み合わせた造語)。
MERGE は、次のように試せます(t1 と t2 テーブルを作成して、これをマージ)。

CREATE TABLE t1 ( a int, b varchar(100) )

INSERT INTO t1
  VALUES   ( 1, 'AAA' )
	 ,( 2, 'BBB' )
	 ,( 3, 'CCC' )
	 ,( 4, 'DDD' )
CREATE TABLE t2 ( a int, b varchar(100) )

INSERT INTO t2
  VALUES  ( 3, 'XXX' )
	,( 5, 'YYY' )

t1 テーブルの「a」列と、t2 テーブルの「a」列をもとに MERGE ステートメントを実行するには、次のように記述します。

MERGE INTO t1
 USING t2
  ON t1.a = t2.a
 WHEN MATCHED THEN
	UPDATE SET t1.b = t2.b
 WHEN NOT MATCHED THEN
	INSERT VALUES ( t2.a, t2.b );

MERGE INTO へマージ(結合)先のテーブル(t1)、USING へマージ対象のテーブル(t2)を指定し、ON へマージの条件(ここでは 「a」列が等しいかどうか)を指定します。WHEN MATCHED(条件がマッチした場合)には、THEN 以下の UPDATE ステートメント(更新処理)が実行され、NOT MATCHED(マッチしなかった場合)には、その下の THEN 以下の INSERT ステートメント(挿入処理)が実行されるようになります。


そのほかの SQL Server 2008 の新機能の具体的な利用方法については、弊社執筆の SQL Server 2008 自習書シリーズ(下記 URL)の「SQL Server 2008 の注目の新機能をイチ早く試してみよう! 」編を参考にしてみてください。
http://www.microsoft.com/japan/sqlserver/2008/self-learning/default.mspx