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:

IF EXISTS (SELECT * FROM tableName WHERE COLUMN='identifier')
    UPDATE tableName  SET VALUE='newValue' WHERE COLUMN='identifier'
ELSE
    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.

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


In this article



Most Recent

Hintergrundbeleuchtung für Laptops, die als Server laufen, ausschalten
Continue reading...

More posts

Entferne überflüssige Whitespaces mit C#
Entferne überflüssige Whitespaces mit C#

Heute wurde ich gefragt, ob und wie es möglich sein, mit Hilfe von C# alle doppelten bzw. überflüssigen Whitespaces in einem Text zu entfernen. Mit...

Die Anzahl eines Zeichens in einem String ermitteln
Die Anzahl eines Zeichens in einem String ermitteln

Heute wurde ich mal wieder mit einem kleinen Problemchen konfrontiert. Und zwar musst ich die Anzahl eines bestimmten Zeichens innerhalb eines...

Dateien mit C# und GZip packen und entpacken
Dateien mit C# und GZip packen und entpacken

Wer öfters mit Dateien arbeitet wird immer wieder mit komprimierten Dateien konfrontiert. Mal bekommt man sie und manchmal muss man solche Dateien...

Den Hostnamen zur einer IP mit C# ermittlen
Den Hostnamen zur einer IP mit C# ermittlen

Kommt ja schon mal häufiger vor das man wissen möchte wir der Hostname zu einer IP ist. Mir ging es vor kurzem so, das ich Logfiles auswerten...