Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden

Neuerungen in SQL Server 2008: MERGE-Anweisung

Wer sich schon immer mal dar­über geär­gert hat, dass meh­rere SQL-Anweisungen nötig waren, um in einer Tabelle, abhän­gig von den Bedingungen in einer ande­ren Tabelle, Daten ein­zu­fü­gen, zu ändern und/oder zu löschen, der wird über die neue MERGE-Anweisung in SQL Server 2008 hoch­er­freut sein - … vor­aus­ge­setzt, er kann sich für kom­plexe SQL-Anweisungen begeistern 😉 . 

Das abso­lute Standard-Szenario für die Anwendung von MERGE ist die Aktualisierung von Daten in einem Data Warehouse auf Basis der Daten aus dem Produktivsystem: Im Data Warehouse sollen 

  • Adressdaten, die im Produktivsystem vor­han­den sind, aber nicht im Data Warehouse, ein­ge­fügt wer­den (INSERT)
  • Adressdaten, die im Produktivsystem und im Data Warehouse vor­han­den sind, geän­dert wer­den (UPDATE)
  • Adressdaten, die im Data Warehouse, nicht aber im Produktivsystem vor­han­den sind, gelöscht wer­den (DELETE)

Dafür waren bis­her 3 Anweisungen der fol­gen­den Art nötig (je eine für INSERT, UPDATE und DELETE):

Mit dem MERGE-Befehl nun ist das alles in einer Anweisung unterzubringen:

blank

Das kommt nicht nur deut­lich ele­gan­ter daher, son­dern ist auch res­sour­cen­spa­rend, da nur eine anstelle meh­re­rer Lookup-Operationen durch­ge­führt wird.

Wichtig: Die MERGE-Anweisung muss immer mit einem Semikolon abge­schlos­sen werden.

Natürlich ist die MERGE-Anweisung noch deut­lich fle­xi­bler als hier abge­bil­dete Variante, z.B. kann die USING-Klausel auch eine Unterabfrage (dann mit einem Alias) ent­hal­ten oder die MATCHED-Klausel belie­big mit wei­te­ren logi­schen Ausrücken kom­bi­niert wer­den, des Weiteren sind belie­big viele MATCHED-Klauseln von jeder Art mög­lich. Ein etwas kom­ple­xe­res Beispiel könnte z.B. so aussehen:

blank

Ausführliche Syntaxinformationen fin­den sich unter http://msdn.microsoft.com/de-de/library/bb510625.aspx.

16. November 2008

Pin It on Pinterest