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