最新のSQL Server 2008の新しい文MERGEを見てみましょう.
2736 ワード
SQL Server 2008には、2つのローセットデータをマージするための新しい構文が含まれます.ここでは、以前の複数の操作手順を単一の文にまとめることができるMERGE文について説明します.
AD:
AD:
SQL Server 2008には、2つのローセット(rowset)データをマージするための新しい構文が含まれます.1つのソースデータテーブルに基づいて別のデータテーブルを確定的に挿入、更新、削除するという複雑な操作を行い、新しいMERGE文を運用することで、開発者は1つのコマンドで完了することができる.
2つのテーブルを情報同期する場合、3ステップの操作が行われます.まず、ターゲット・データ・テーブルを挿入する必要がある新しいローを処理します.次に、更新が必要な既存のローを処理します.最後に、使用されなくなった古いローを削除します.このプロセスでは、多数の重複する論理を維持し、微妙なエラーを引き起こす可能性があります.
Bob Beaucheminは、上述した複数の売買IC網操作ステップを単一の文に統合するMERGE文を議論する.彼は以下の例を示した:
- merge [target] t
- using [source] s on t.id = s.id
- when matched then update set t.name = s.name, t.age = s.age -- use "rowset1"
- when not matched then insert values(id,name,age) -- use "rowset2"
- when not matched by source then delete; -- use "rowset3"
ご覧のように、売買IC網の具体的な動作は、後の連合(join)の解析結果に基づいて決定される.この例では、ターゲットとソース・データ・テーブルが一致するローがある場合、更新操作を実行します.ない場合は、ターゲット・データ・テーブルとソース・データ・テーブルが一致するように挿入または削除操作を行います.
この新しい文法の1つのすばらしさは、更新を処理する際の確定性である.売買IC網標準のUPDATE構文と結合を使用すると、1つ以上のソース行がターゲット行に一致する可能性があります.この場合、更新操作でどのソース行のデータが使用されるか予測できません.
MERGE構文を使用する場合、複数の一致がある場合、エラーが放出されます.これは開発者に,予想される目標を達成するには,現在の連合条件がまだ明確ではないことを示唆している.