Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy mogę użyć instrukcji MERGE w SQL Server 2005?

MERGE został wprowadzony w SQL Server 2008. Jeśli chcesz używać tej składni, musisz dokonać aktualizacji.

W przeciwnym razie typowe podejście będzie zależeć od tego, skąd pochodzą dane źródłowe. Jeśli to tylko jeden wiersz i nie wiesz, czy musisz zaktualizować, czy wstawić, prawdopodobnie zrobisz:

UPDATE ... WHERE key = @key;

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

Jeśli źródłem jest tabela #temp, zmienna tabeli, TVP lub inna tabela, możesz wykonać:

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

Podobnie jak w przypadku MERGE (i jak Michael Swart zademonstrował tutaj ), nadal będziesz chciał otoczyć każdą z tych metod odpowiednimi transakcjami, obsługą błędów i poziomem izolacji, aby zachowywać się jak prawdziwa, pojedyncza operacja. Nawet pojedynczy MERGE oświadczenie nie chroni przed współbieżnością.

Opublikowałem kilka innych ostrzeżeń dotyczących MERGE w więcej szczegółów tutaj .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaimplementować warunkową procedurę składowaną Upsert?

  2. SQL Server 2008 — jak przekonwertować datetime GMT(UTC) na lokalną datetime?

  3. Zapytanie SQL wypełniania zasobnika CTE

  4. LEFT() vs SET TEXTSIZE w SQL Server:jaka jest różnica?

  5. Tworzenie indeksu ciągów z kodem jako pierwszy