SQL Server 2008 以降には、まさにそれを行う MERGE ステートメントがあります。
MERGE の MSDN ブックス オンライン ドキュメント を参照してください。 詳細はこちら
基本的に、次の 4 つが必要です。
- ソース (テーブルまたはビューまたはインライン SELECT ステートメント)
- ターゲット
- JOIN 両者をつなぐ条件
- MATCH (行がソースとターゲットの両方に存在する)、NOT MATCHED (行がまだターゲットに存在しない) などの場合のステートメント
したがって、基本的には次のように定義します:
MERGE (targettable) AS t USING (sourcetable) AS s ON (JOIN condition between s and t) WHEN MATCHED THEN UPDATE SET t.Col1 = s.Col1, t.Col2 = s.Col2 (etc.) WHEN NOT MATCHED THEN INSERT(Col1, Col2, ..., ColN) VALUES(s.Col1, s.Col2, ......, s.ColN)
プレ>これは 1 つのステートメントとして実行され、SQL Server によって高度に最適化されます。