sql >> Databáze >  >> RDS >> Sqlserver

Mohu použít příkaz MERGE v SQL Server 2005?

MERGE byl představen v SQL Server 2008. Chcete-li použít tuto syntaxi, budete muset provést upgrade.

Jinak bude typický přístup záviset na tom, odkud jsou zdrojová data. Pokud je to jen jeden řádek a nevíte, zda je potřeba aktualizovat nebo vložit, pravděpodobně byste to udělali:

UPDATE ... WHERE key = @key;

IF @@ROWCOUNT = 0
BEGIN
    INSERT ...
END

Pokud je vaším zdrojem #temp tabulka, proměnná tabulky, TVP nebo jiná tabulka, můžete:

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);

Stejně jako u MERGE (a jak zde předvedl Michael Swart ), budete stále chtít obklopit kteroukoli z těchto metod správnými transakcemi, zpracováním chyb a úrovní izolace, aby se chovala jako skutečná, jediná operace. Dokonce i jediné MERGE prohlášení vás nechrání před souběžností.

Zveřejnil jsem některá další upozornění ohledně SLOUČENÍ v více podrobností zde .




  1. PostgreSQL - obnovení jedné tabulky z výpisu databáze

  2. MySQL odstraní všechny indexy z tabulky

  3. Jak mohu mít v dotazu elasticsearch klauzuli MySQL IN?

  4. přidání pracovních dnů v Oracle SQL