sql >> Database teknologi >  >> RDS >> Sqlserver

Kan jeg bruge MERGE-sætningen i SQL Server 2005?

MERGE blev introduceret i SQL Server 2008. Hvis du vil bruge denne syntaks, skal du opgradere.

Ellers vil den typiske tilgang afhænge af, hvor kildedataene kommer fra. Hvis det kun er én række, og du ikke ved, om du skal opdatere eller indsætte, ville du sandsynligvis gøre:

UPDATE ... WHERE key = @key;

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

Hvis din kilde er en #temp-tabel, tabelvariabel, TVP eller anden tabel, kan du gøre:

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

Som med MERGE (og som Michael Swart demonstrerede her ), vil du stadig gerne omgive enhver af disse metoder med korrekte transaktioner, fejlhåndtering og isolationsniveau for at opføre sig som en ægte, enkelt operation. Selv en enkelt MERGE erklæring beskytter dig ikke mod samtidighed.

Jeg har udgivet nogle andre advarsler om FLOT i flere detaljer her .




  1. Slet en Crashed Innodb-tabel

  2. Postgresql trunkeringshastighed

  3. Vælg TOP X (eller nederste) procent for numeriske værdier i MySQL

  4. XAMPP VIRKER IKKE! - OS X Yosemite