sql >> データベース >  >> RDS >> Sqlserver

T-SQL 単一の高速操作で更新/挿入を行うことは可能ですか?

    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 によって高度に最適化されます。




    1. コミットされたスナップショットとスナップショット分離レベルの読み取り

    2. 列の値に基づくMySQL内部結合テーブル

    3. SQLDeveloperで表の作成中にエラーORA-00907が発生する

    4. ストアド プロシージャの出力パラメーターが @Value を返す