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 に関する その他の注意事項を公開しました。詳細はこちら .