SQL Server 2005を使用していて、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に関するその他の注意事項について詳しく説明します 。