sql >> Database >  >> RDS >> Sqlserver

Kan ik de MERGE-instructie in SQL Server 2005 gebruiken?

MERGE werd geïntroduceerd in SQL Server 2008. Als u die syntaxis wilt gebruiken, moet u upgraden.

Anders hangt de typische aanpak af van waar de brongegevens vandaan komen. Als het maar één rij is en u niet weet of u deze moet bijwerken of invoegen, zou u dat waarschijnlijk doen:

UPDATE ... WHERE key = @key;

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

Als uw bron een #temp-tabel, tabelvariabele, TVP of andere tabel is, kunt u het volgende doen:

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

Net als bij MERGE (en zoals Michael Swart hier demonstreerde ), wilt u nog steeds een van deze methoden omringen met de juiste transacties, foutafhandeling en isolatieniveau om zich als een echte, enkele bewerking te gedragen. Zelfs een enkele MERGE verklaring beschermt u niet tegen gelijktijdigheid.

Ik heb enkele andere waarschuwingen over MERGE gepubliceerd in meer details hier .




  1. SQL Selecteer alleen rijen met minimale waarde in een kolom met Where-voorwaarde

  2. Kan een Android-app rechtstreeks verbinding maken met een online mysql-database?

  3. Tijdelijke tabelrecordlimiet in SQL-server

  4. Veroorzaakt het verpakken van nullable-kolommen in ISNULL tabelscans?