sql >> Databasteknik >  >> RDS >> Sqlserver

Kan jag använda MERGE-satsen i SQL Server 2005?

MERGE introducerades i SQL Server 2008. Om du vill använda den syntaxen måste du uppgradera.

Annars kommer det typiska tillvägagångssättet att bero på varifrån källdata kommer. Om det bara är en rad och du inte vet om du behöver uppdatera eller infoga, skulle du förmodligen göra:

UPDATE ... WHERE key = @key;

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

Om din källa är en #temp-tabell, tabellvariabel, TVP eller annan tabell kan du göra:

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 (och som Michael Swart demonstrerade här ), kommer du fortfarande att vilja omge någon av dessa metoder med korrekta transaktioner, felhantering och isoleringsnivå för att bete sig som en sann, enda operation. Till och med en enda MERGE uttalandet skyddar dig inte från samtidighet.

Jag har publicerat några andra varningar om MERGE in mer information här .




  1. Mysql Uppdaterar en post med ett värde från föregående post

  2. Hur laddar jag ner en fil med PHP och Mysql DB

  3. Hur man löser MySQL max_user_connections-felet

  4. Naturlig sort som stöder stora siffror