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, …).
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) kennt kaum Auto-Formatierung, und etablierte Style-Konventionen aus anderen Sprachen lassen sich schlecht übertragen. Der Grund liegt im 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 zu tracken. 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. 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:
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, so kann hier die Schönheit, Gesetzmäßigkeiten, Harmonie und sicherlich auch die Sinnhaftigkeit dieses Statements in Frage gestellt werden.
Das gleiche Statement etwas umformatiert und umgeschrieben erscheint ästhetischer als das vorige Statement:
SELECT
T01.[ProductKey]
,T04.[EnglishProductName]
,T01.[DueDateKey]
,T02.[FullDateAlternateKey]
,T01.[CustomerKey]
,T03.[LastName]
FROM
[dbo].[FactInternetSales] T01
LEFT JOIN [dbo].[DimDate] T02
ON
T01.[DueDateKey] = T02.[DateKey]
LEFT JOIN [dbo].[DimCustomer] T03
ON
T01.[CustomerKey] = T03.[CustomerKey]
LEFT JOIN [dbo].[DimProduct] T04
ON
T01.[ProductKey] = T04.[ProductKey];
Auf jeden Fall ist dieses Statement lesbarer und verständlicher. Einzelne Bestandteile des Statements können allein aufgrund der Position innerhalb des Statements identifiziert werden. Der Begriff der Ästhetik mag hier im technischen Sinne weit hergeholt sein, allerdings können viele Anforderungen an strukturiertem Code unter diesem Begriff zusammengefasst werden.
Funktionalität
Die Überschrift dieses Artikels stellt auf die Funktionalität der Ästhetik ab. Es geht hier weniger um die Funktion von SQL-Befehlen, sondern um mächtige Editierfunktionen von SSMS (aber auch anderen Editoren), mit denen sich SQL-Statements schnell strukturieren und formatieren lassen. Zwei wichtige Power-Features sind hier die Blockauswahl und die Suchen&Ersetzen Funktion. In Verbindung mit einer gewissen Affinität für die Verwendung der Tastatur anstatt der Maus lässt sich schnell ein gut strukturiertes und formatiertes SQL Statement erstellen.
Die Blockauswahl
Die Blockauswahl (in SSMS „Spaltenauswahl“, in VS Code und Azure Data Studio „Box Selection“) ist ein derart mächtiges Feature in zahlreichen Editoren, dass es mir unverständlich ist, wie wenig dieses Power-Feature unter Entwicklern bekannt ist bzw. genutzt wird. 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. Über die Tastenkombination ALT+Shift+Pfeil-runter kann der Cursor in dem folgenden Beispiel ausgehend von dem ersten Vorkommen des Alias T01 zunächst über mehrere Zeilen erweitert werden, um anschließend über ALT+Shift+Pfeil-rechts einen Block über alle Aliase zu selektieren.

Die Blockauswahl ermöglicht also die Erweiterung des Cursors über mehrere Zeilen und die Selektion eines Blockes an einer beliebigen Stelle des Editors. Texteingaben werden auf alle Zeilen, über die sich der Cursor erstreckt, angewendet. Der nachfolgende Text wurde nicht durch Copy&Paste dupliziert, sondern nach der Erweiterung des Cursors über 5 Zeilen genau einmal (in alle 5 Zeilen) geschrieben.

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.
- Eine effiziente Verwendung der Blockauswahl ist nur dann gegeben, wenn Tabs durch Leerzeichen eingefügt werden. 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.
- In SQL Server Management Studio und Microsoft Visual Studio ist das Feature identisch implementiert. Notepad++ macht die Blockauswahl ebenfalls über die Tastenkombination
ALT+Shiftverfügbar, die Implementierung des Features weicht jedoch von der Implementierung in den Microsoft Produkten ab und ist meines Erachtens nicht so 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 wohl eher für die Ersetzung einzelner Textfragmente geplant, erweist sich diese Feature als weiteres Power-Feature für die Formatierung von SQL-Code.
Ein Beispiel… SQL Server unterstützt als Bezeichnungsbegrenzer (Delimiter) für Feldnamen wahlweise das Anführungszeichen („) oder eckige Klammern ([ ]). Delimiter sind zwar nicht grundsätzlich erforderlich, sie erhöhen allerdings die Lesbarkeit.
Die nachfolgenden beiden SELECT Statements unterscheiden sich lediglich durch die Delimiter der Feldnamen.
Ohne Delimiter:
SELECT
T01.object_id
,T01.name
,T01.column_id
,T01.system_type_id
,T01.user_type_id
,T01.max_length
,T01.precision
FROM
sys.columns T01
Mit Delimiter (eckige Klammern):
SELECT
T01.[object_id]
,T01.[name]
,T01.[column_id]
,T01.[system_type_id]
,T01.[user_type_id]
,T01.[max_length]
,T01.[precision]
FROM
[sys].[columns] T01
Das Einfügen von Delimitern erscheint bei größeren Statements eine 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 schnell über die Blockauswahl wie in der nachfolgenden Abbildung eingefügt.

Durch geschickte Verwendung der Suchen&Ersetzen Funktion können die schließenden eckigen Klammern so weit nach links eingerückt werden, bis zwischen dem letzten Zeichen der Feldnamen und der schließenden Klammer keine Leerzeichen mehr vorhanden sind. Dazu wird der Text <Leerzeichen>] so lange durch ]<Leerzeichen> ersetzt, bis kein Vorkommen von <Leerzeichen>] mehr gefunden wird.

Fazit
Je strukturierter und formatierter SQL-Code ist, desto lesbarer und wartbarer wird er. SSMS bietet mit der Blockauswahl und der Suchen&Ersetzen Funktion zwei mächtige Power-Features zur Verfügung, mit Hilfe derer SQL-Code schnell und effizient strukturiert und formatiert werden kann. Das Ergebnis mag ästhetisch empfunden werden oder nicht. Sie 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. Im direkten Vergleich ist DataGrip auch deutlich potenter als Visual Studio Code mit SQL-Erweiterungen.
Seit Oktober 2025 ist DataGrip kostenfrei für nicht-kommerzielle Nutzung (JetBrains-Ankündigung) — eine Eintrittsbarriere weniger zum Ausprobieren.
FAQ
Warum sollte ich SQL überhaupt manuell formatieren — Auto-Formatter machen das doch?
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 nichts über die Datenbasis.
Wie aktiviere ich die Blockauswahl in SSMS?
Halte ALT+Shift gedrückt und ziehe entweder mit den Pfeiltasten (Pfeil-runter/Pfeil-rechts) oder mit der linken Maustaste ein Rechteck auf. Was du dann tippst, erscheint gleichzeitig in allen markierten Zeilen.
Funktioniert die Blockauswahl auch in anderen Editoren?
Ja — in Visual Studio (identisch zu SSMS), Azure Data Studio, VS Code, DataGrip, DBeaver und sogar in Microsoft Word. Die Tastenkombination ALT+Shift mit Pfeiltasten oder Maus ist überall gleich. Notepad++ unterstützt sie ebenfalls, allerdings mit einer leicht abweichenden Implementierung.
Was ist der Unterschied zwischen Blockauswahl und Multi-Cursor?
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.
Wie ersetze ich Text in vielen SQL-Zeilen gleichzeitig?
Ctrl+H öffnet Suchen&Ersetzen. Für komplexere Muster — etwa „alle CONVERT(-Aufrufe zu TRY_CONVERT(“ — aktiviere die Regex-Option im Suchdialog. Für sich wiederholende, gleichartige Eingaben innerhalb desselben Zeilen-Blocks ist die Blockauswahl meist schneller.