SQL-Server: If Exists Update Else Insert

Eine eine ziemlich häufige und immer wiederkehrende Situation, bei der Entwicklung mit Datenbanken ist es, das man Daten aktualisieren, bzw wenn der Datensatz noch nicht existiert dieser erstellen möchte.

In der Onlinedokumentation wird folgender Weg vorgeschlagen:

  1. IF EXISTS (SELECT * FROM tableName WHERE COLUMN='identifier')
  2. UPDATE tableName SET VALUE='newValue' WHERE COLUMN='identifier'
  3. ELSE
  4. INSERT INTO tableName VALUES (...)

Dieser Ansatz funktioniert ohne Probleme. Egal ob in einer StoredProcedure oder in einem SQL Statement. Allerdings ist es wie so häufig bei Onlinedokumentationen, nicht der Beste Weg den man wählen kann. In diesem Fall wird ein Table- bzw. Indexscan für das SELECT Statement wie auch für das Update durchgeführt!. Das kann vor allem bei größeren Tabellen zu Performance Verlusten führen.

In den meisten Fällen, wird die folgende Lösung höchstwahrscheinlich zu einer bessere Leistung führen, da die Table/Index Scans nur noch ein einziges mal durchgeführt werden müssen.

  1. UPDATE tableName SET VALUE='newValue' WHERE COLUMN='identifier'
  2. IF @@ROWCOUNT=0
  3. INSERT INTO tableName VALUES (...)
Tags: 

Neuen Kommentar schreiben