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

SQL Server 2005 で MERGE ステートメントを使用できますか?

    MERGE は SQL Server 2008 で導入されました。その構文を使用する場合は、アップグレードする必要があります。

    それ以外の場合、典型的なアプローチは、ソース データがどこからのものかによって異なります。 1 行だけで、更新する必要があるか挿入する必要があるかわからない場合は、おそらく次のようにします:

    UPDATE ... WHERE key = @key;
    
    IF @@ROWCOUNT = 0
    BEGIN
        INSERT ...
    END
    

    ソースが #temp テーブル、テーブル変数、TVP、またはその他のテーブルである場合、次のことができます:

    UPDATE dest SET ...
      FROM dbo.destination AS dest
      INNER JOIN dbo.source AS src
      ON dest.key = src.key;
    
    INSERT dbo.destination SELECT ... FROM dbo.source AS src
      WHERE NOT EXISTS (SELECT 1 FROM dbo.destination WHERE key = src.key);
    

    MERGE と同様 (そして Michael Swart がここで実演したように )、これらのメソッドのいずれかを適切なトランザクション、エラー処理、および分離レベルで囲み、真の単一操作のように動作させたいと思うでしょう。単一の MERGE でも ステートメントは並行性から保護しません。

    MERGE に関する その他の注意事項を公開しました。詳細はこちら .




    1. postgresql:オフセット+制限が非常に遅くなります

    2. データベーステーブルから選択ドロップダウンにデータを入力します

    3. cmd.exe からストアド プロシージャを実行しますか?

    4. on句の不明な列{0}