web-dev-qa-db-ja.com

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

SQL Server 2005を使用していて、SQL Server 2005の単一のクエリでMERGEステートメントまたは概念を作成したかったのですが、可能ですか?

12
Vikrant More

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に関するその他の注意事項について詳しく説明します

26
Aaron Bertrand