最新のSQL Server 2008の新しい文MERGEを見てみましょう.

2736 ワード

SQL Server 2008には、2つのローセットデータをマージするための新しい構文が含まれます.ここでは、以前の複数の操作手順を単一の文にまとめることができるMERGE文について説明します.
AD:







 


SQL Server 2008には、2つのローセット(rowset)データをマージするための新しい構文が含まれます.1つのソースデータテーブルに基づいて別のデータテーブルを確定的に挿入、更新、削除するという複雑な操作を行い、新しいMERGE文を運用することで、開発者は1つのコマンドで完了することができる.


2つのテーブルを情報同期する場合、3ステップの操作が行われます.まず、ターゲット・データ・テーブルを挿入する必要がある新しいローを処理します.次に、更新が必要な既存のローを処理します.最後に、使用されなくなった古いローを削除します.このプロセスでは、多数の重複する論理を維持し、微妙なエラーを引き起こす可能性があります.


Bob Beaucheminは、上述した複数の売買IC網操作ステップを単一の文に統合するMERGE文を議論する.彼は以下の例を示した:


   
     
  1. merge [target] t  
  2. using [source] s on t.id = s.id  
  3. when matched then update set t.name = s.name, t.age = s.age -- use "rowset1"  
  4. when not matched then insert values(id,name,age) -- use "rowset2"  
  5. when not matched  by source then delete-- use "rowset3" 

ご覧のように、売買IC網の具体的な動作は、後の連合(join)の解析結果に基づいて決定される.この例では、ターゲットとソース・データ・テーブルが一致するローがある場合、更新操作を実行します.ない場合は、ターゲット・データ・テーブルとソース・データ・テーブルが一致するように挿入または削除操作を行います.


この新しい文法の1つのすばらしさは、更新を処理する際の確定性である.売買IC網標準のUPDATE構文と結合を使用すると、1つ以上のソース行がターゲット行に一致する可能性があります.この場合、更新操作でどのソース行のデータが使用されるか予測できません.


MERGE構文を使用する場合、複数の一致がある場合、エラーが放出されます.これは開発者に,予想される目標を達成するには,現在の連合条件がまだ明確ではないことを示唆している.