Wer einmal ein 200-Zeilen-SELECT ohne Einrückung debuggen musste, weiß: Formatierung von SQL ist mehr als Geschmacksfrage. Lesbarer Code lässt sich nicht nur besser verstehen — er lässt sich mit den richtigen Editor-Werkzeugen auch deutlich schneller bearbeiten.
In diesem Artikel:
- Warum SQL ein eigenes Stilproblem hat
- Blockauswahl: gleichzeitiges Editieren mehrerer Zeilen
- Suchen&Ersetzen als Formatierungs-Werkzeug
Voraussetzung: SSMS dient als Beispiel-Editor; die Prinzipien gelten für jeden Editor mit Blockauswahl (Azure Data Studio, VS Code, DataGrip, DBeaver, …).
Inhalt
- Warum SQL einen eigenen Stil braucht
- Formatieren ist Lernen
- Ästhetik
- Funktionalität
- Fazit
- Wenn SSMS an Grenzen kommt: DataGrip
- FAQ
Warum SQL einen eigenen Stil braucht
Visual Studio und VS Code formatieren C#, Python und JavaScript größtenteils automatisch — für SQL gilt das nur eingeschränkt. SQL Server Management Studio (SSMS) bietet im Vergleich zu spezialisierten SQL-Editoren nur begrenzte automatische Formatierung, und einen einheitlichen, verbindlichen Formatierungsstil, wie ihn andere Sprachen kennen, gibt es für SQL nicht: Konventionen und Styleguides existieren viele — welche gilt, hängt von Dialekt, Formatter und Team ab. Dazu kommt das Paradigma: Ein einzelnes SQL-Statement kann sich über hunderte Zeilen erstrecken, während Software-Code typischerweise aus vielen kurzen Anweisungen besteht. Lesbarkeit muss in SQL also bewusst hergestellt werden: manuell oder mit Editor-Werkzeugen, die genau das erleichtern.
Formatieren ist Lernen
Wer ein 100-Zeilen-SELECT manuell formatiert, kommt nicht umhin, das Statement wirklich zu lesen. Einrückung an JOIN-Klauseln zwingt dazu, die Beziehungen zwischen Tabellen mental aufzubauen. Aliase ausrichten heißt, die Spalten-Herkunft nachzuverfolgen. Klammern setzen heißt, die Logik präzise zu durchdringen. Das Ergebnis ist nicht nur lesbarer Code — es ist ein besseres Modell der Daten im Kopf des Schreibers.
Wer dagegen im Designer zusammenklickt oder eine Wortwolke aus Snippets kopiert, hat am Ende ein funktionierendes Statement und kein Verständnis. Das ist eine Erfahrungs-These und kein Naturgesetz, aber eine, die sich in der Praxis immer wieder bestätigt. In einer Welt, in der Copilot und Cursor SQL fertig hinschreiben, wird dieses Verstehens-Defizit zum Risiko: technisch korrektes SQL, das die fachliche Frage trotzdem nicht beantwortet, weil der Schreiber die Daten nie wirklich angesehen hat. SQL ist näher an Datenmodellierung als an klassischem Programmieren — und Modellierung verlangt Verstehen, nicht Tippen. Manuelle Formatierung ist eine Disziplin, die genau das verhindert. Lesbarkeit ist nur das sichtbare Nebenprodukt.
Ästhetik
Wenn ein SQL-Statement strukturiert ist, wird seine Logik sichtbar — das ist die Ästhetik, die hier gemeint ist. Was im funktionalen Code als Schönheit, Gesetzmäßigkeit und Harmonie durchgeht, ist nichts Esoterisches: Es sind die Eigenschaften, die strukturierter Code hat und eine Wortwolke aus Snippets eben nicht.
Das folgende SQL-Statement ist zugegebenermaßen nicht sinnvoll, aber dennoch valide und kann in der Datenbank AdventureWorksDW2017 ohne Probleme ausgeführt werden:
1: SELECT[DimDate].ProductKey,C.EnglishProductName,DueDateKey,FullDateAlternateKey,DimDate.CustomerKey,B.[LastName]FROM[dbo].FactInternetSales[DimDate],dbo.[DimDate]D,dbo.[DimCustomer]B,dbo.DimProduct[C]WHERE[DueDateKey]=[DateKey]AND[DimDate].[ProductKey]=[C].[ProductKey]AND[DimDate].CustomerKey=B.CustomerKey
Auch wenn Ästhetik subjektiv ist, lassen sich Schönheit, Gesetzmäßigkeit und Harmonie dieses Statements in Frage stellen — und sicherlich auch seine Sinnhaftigkeit.
Das gleiche Statement, etwas umformatiert und umgeschrieben, erscheint ästhetischer als die erste Fassung:
1: SELECT
2: T01.[ProductKey]
3: ,T04.[EnglishProductName]
4: ,T01.[DueDateKey]
5: ,T02.[FullDateAlternateKey]
6: ,T01.[CustomerKey]
7: ,T03.[LastName]
8: FROM
9: [dbo].[FactInternetSales] T01
10: LEFT JOIN [dbo].[DimDate] T02
11: ON
12: T01.[DueDateKey] = T02.[DateKey]
13: LEFT JOIN [dbo].[DimCustomer] T03
14: ON
15: T01.[CustomerKey] = T03.[CustomerKey]
16: LEFT JOIN [dbo].[DimProduct] T04
17: ON
18: T01.[ProductKey] = T04.[ProductKey];
Die zweite Fassung ist dabei nicht nur eingerückt, sondern auch umgeschrieben: Die impliziten Komma-Joins des ersten Statements sind durch explizite LEFT JOIN-Klauseln ersetzt, und die Aliase folgen einem einheitlichen positionellen Schema (T01–T04). Das Ergebnis ist lesbarer und verständlicher: Einzelne Bestandteile lassen sich allein aufgrund ihrer Position innerhalb des Statements identifizieren. Der Begriff der Ästhetik mag hier im technischen Sinne weit hergeholt sein, allerdings lassen sich viele Anforderungen an strukturierten Code unter diesem Begriff zusammenfassen.
Funktionalität
Die Überschrift dieses Artikels stellt auf die Funktionalität der Ästhetik ab. Es geht hier weniger um die Funktion von SQL-Befehlen als um mächtige Editierfunktionen, mit denen sich SQL-Statements in SSMS und anderen Editoren schnell strukturieren und formatieren lassen. Zwei wichtige Power-Features sind die Blockauswahl und die Suchen&Ersetzen-Funktion. Wer dabei die Tastatur der Maus vorzieht, erstellt in kurzer Zeit ein gut strukturiertes und formatiertes SQL-Statement.
Die Blockauswahl
Die Blockauswahl (in SSMS „Spaltenauswahl“, in VS Code und Azure Data Studio „Box Selection“) ist in zahlreichen Editoren verfügbar und ein derart mächtiges Feature, dass es immer wieder überrascht, wie selten es im Entwickler-Alltag zum Einsatz kommt. Die Blockauswahl erlaubt es, Text blockweise zu selektieren und zu bearbeiten — anstelle der zeilenbasierten Standard-Selektion.
Für die zeilenweise Selektion von Text wird die Shift-Taste benötigt. Über die Tastenkombination Shift+Pfeil-rechts wird ein Text beginnend bei der aktuellen Cursor-Position nach rechts selektiert. Die Selektion erfolgt hier zeichenweise und kann sich auch über mehrere Zeilen erstrecken:

Für eine blockweise Selektion von Text wird die Shift-Taste in Kombination mit der ALT-Taste verwendet. Im folgenden Beispiel wird der Cursor über die Tastenkombination ALT+Shift+Pfeil-runter ausgehend vom ersten Vorkommen des Alias T01 zunächst über mehrere Zeilen erweitert. Anschließend selektiert ALT+Shift+Pfeil-rechts einen Block über alle Aliase.

Die Blockauswahl ermöglicht es also, den Cursor über mehrere Zeilen zu erweitern und einen Block an beliebiger Stelle des Editors zu selektieren. Texteingaben werden auf alle Zeilen angewendet, über die sich der Cursor erstreckt. Der nachfolgende Text wurde nicht durch Copy&Paste dupliziert, sondern genau einmal getippt, nachdem der Cursor über fünf Zeilen erweitert wurde — die Eingabe landet gleichzeitig in allen fünf Zeilen.

Die Blockauswahl kann auch in Verbindung mit der Maus verwendet werden. Ausgehend von der aktuellen Cursor-Position kann bei gleichzeitigem Drücken von ALT+Shift und der linken Maustaste ein Rechteck aufgezogen werden.


Damit die Blockauswahl wirklich Zeit spart, muss das SQL-Statement strukturiert gegliedert und präzise eingerückt sein.
Die Verwendung der Blockauswahl ist anfänglich etwas gewöhnungsbedürftig. Wer sie aber einmal zu schätzen gelernt hat, wird dieses Feature nicht mehr missen wollen.
Anmerkung
- Die Verwendung der Blockauswahl funktioniert nur in den Bereichen des Editors, in denen Zeilenumbrüche vorliegen.
- Die Blockauswahl arbeitet zeichenspalten-basiert: Echte Tabulator-Zeichen brechen das rechteckige Auswahlverhalten, der Editor sollte Tabs daher als Leerzeichen einfügen. Siehe hierzu auch Editor Optionen in SSMS.
- Die blockweise Selektion wird von zahlreichen Editoren und sogar Microsoft Word unterstützt: SQL Server Management Studio, Microsoft Visual Studio, Notepad++, etc.
- Die Implementierung dieses Power-Features kann jedoch von Editor zu Editor stark abweichen.
- SQL Server Management Studio basiert auf der Visual-Studio-Shell, das Feature verhält sich in beiden Produkten deshalb gleich. Notepad++ macht die Blockauswahl ebenfalls über die Tastenkombination
ALT+Shiftverfügbar, die Implementierung des Features weicht jedoch von der in den Microsoft-Produkten ab und ist weniger intuitiv und komfortabel.
Suchen & Ersetzen
Die Suchen&Ersetzen-Funktion ist wohl jedem bekannt und in SSMS über die Tastenkombination Ctrl+H verfügbar. Ursprünglich eher für die Ersetzung einzelner Textfragmente gedacht, erweist sie sich als weiteres Power-Feature für die Formatierung von SQL-Code.
Ein Beispiel zeigt das: SQL Server unterstützt als Bezeichnungsbegrenzer (Delimiter) für Feldnamen eckige Klammern ([ ]) sowie das doppelte Anführungszeichen (") — Letzteres nur bei eingeschalteter Option QUOTED_IDENTIFIER, dem Standard in SSMS. Zwingend erforderlich sind Delimiter nur bei Bezeichnern, die etwa reservierte Wörter, Leerzeichen oder Sonderzeichen enthalten. Viele Teams setzen sie trotzdem durchgängig, damit jeder Bezeichner syntaktisch eindeutig markiert ist. Ob das die Lesbarkeit erhöht oder eher wie visuelles Rauschen wirkt, ist eine Frage der Konvention.
Die nachfolgenden beiden SELECT-Statements unterscheiden sich lediglich durch die Delimiter der Feldnamen.
Ohne Delimiter:
1: SELECT
2: T01.object_id
3: ,T01.name
4: ,T01.column_id
5: ,T01.system_type_id
6: ,T01.user_type_id
7: ,T01.max_length
8: ,T01.precision
9: FROM
10: sys.columns T01
Mit Delimiter (eckige Klammern):
1: SELECT
2: T01.[object_id]
3: ,T01.[name]
4: ,T01.[column_id]
5: ,T01.[system_type_id]
6: ,T01.[user_type_id]
7: ,T01.[max_length]
8: ,T01.[precision]
9: FROM
10: [sys].[columns] T01
Das Einfügen von Delimitern erscheint bei größeren Statements als Herausforderung. Insbesondere das Einfügen der schließenden eckigen Klammern ist problematisch, da die Position der schließenden eckigen Klammern von Zeile zu Zeile abweicht.
Tatsächlich ist diese Aufgabe aber in wenigen Momenten erledigt.
Die Klammern sind über die Blockauswahl schnell eingefügt, wie die nachfolgende Abbildung zeigt.

Mit der Suchen&Ersetzen-Funktion lassen sich die schließenden eckigen Klammern anschließend so weit nach links rücken, bis zwischen dem letzten Zeichen der Feldnamen und der schließenden Klammer keine Leerzeichen mehr stehen. Dazu wird der Text <Leerzeichen>] so lange durch ]<Leerzeichen> ersetzt, bis kein Vorkommen von <Leerzeichen>] mehr gefunden wird.

Fazit
Je konsequenter SQL-Code strukturiert und formatiert ist, desto lesbarer und wartbarer wird er. SSMS stellt mit der Blockauswahl und der Suchen&Ersetzen-Funktion zwei mächtige Power-Features zur Verfügung, mit deren Hilfe SQL-Code schnell und effizient strukturiert und formatiert werden kann. Das Ergebnis mag als ästhetisch empfunden werden oder nicht. Die Ästhetik ist hier jedoch nur ein beiläufiges Attribut. Der Begriff der Ästhetik wurde in diesem Artikel als provokantes Buzzword verwendet.
Wenn SSMS an Grenzen kommt: DataGrip
Für gelegentliche SQL-Editierung mit Blockauswahl und Suchen&Ersetzen ist SSMS ein solider Editor. Wer aber regelmäßig größere Statements refactort, findet in DataGrip von JetBrains ein deutlich mächtigeres Werkzeug: echter Multi-Cursor an beliebigen Positionen, eingebautes Auto-Format für T-SQL und Postgres, intelligente Spalten- und Alias-Refactorings. Für umfangreiche SQL-Refactorings und datenbankspezifische Navigation bietet DataGrip mehr integrierte Funktionen als eine typische VS-Code-Konfiguration mit SQL-Erweiterungen.
Seit Oktober 2025 ist DataGrip kostenfrei für nicht-kommerzielle Nutzung (JetBrains-Ankündigung). Damit fällt eine Eintrittsbarriere zum Ausprobieren weg.
FAQ
Auto-Formatter (sqlfluff, pgFormatter, Formatierungs-Buttons im Editor) erzeugen lesbares Layout, aber sie ersetzen nicht den Akt des Formatierens. Beim manuellen Einrücken, Alias-Ausrichten und Klammer-Setzen liest man das Statement zwangsläufig vollständig — und baut dabei ein mentales Modell der Daten und ihrer Beziehungen auf. Auto-Formatter sind sinnvoll als letzter Polish-Schritt, aber wer sich beim Schreiben nie mit der Struktur des Statements beschäftigt, lernt dabei wenig über die Datenbasis.
ALT+Shift gedrückt halten und entweder mit den Pfeiltasten (Pfeil-runter/Pfeil-rechts) oder mit der linken Maustaste ein Rechteck aufziehen. Die anschließende Eingabe erscheint gleichzeitig in allen markierten Zeilen.
Ja — in Visual Studio (identisch zu SSMS), Azure Data Studio, VS Code, DataGrip, DBeaver und sogar in Microsoft Word. Das Prinzip ist überall dasselbe, Tastenkombination und Implementierungs-Details unterscheiden sich aber je nach Editor, Betriebssystem und Konfiguration. In den Microsoft-Tools ist es ALT+Shift mit Pfeiltasten oder Maus, Notepad++ nutzt dieselbe Kombination mit leicht abweichendem Verhalten.
Beide erlauben gleichzeitiges Editieren an mehreren Stellen. Die Blockauswahl zieht ein Rechteck auf — alle markierten Spalten in untereinanderliegenden Zeilen. Der Multi-Cursor (Ctrl+Klick in VS Code, DataGrip und Azure Data Studio; in SSMS eingeschränkt verfügbar) setzt mehrere unabhängige Cursor an beliebigen Stellen. Für formatierungs-orientiertes Refactoring von SQL-Spalten ist die Blockauswahl meist intuitiver; für unregelmäßige Mehrfach-Edits ist Multi-Cursor flexibler.
Ctrl+H öffnet Suchen&Ersetzen. Für komplexere Muster — etwa „alle CONVERT(-Aufrufe zu TRY_CONVERT(“ — hilft die Regex-Option im Suchdialog. Für sich wiederholende, gleichartige Eingaben innerhalb desselben Zeilen-Blocks ist die Blockauswahl meist schneller.