SQL Server (T-SQL) Formatter

Füge eine T-SQL-Abfrage ein und erhalte konsistent formatiertes SQL. [Identifier] in eckigen Klammern, @Parameter und SQL-Server-Klauseln wie TOP und OPTION werden alle behandelt.

Eine SQL Server-Abfrage, vorher und nachher

Die unformatierte Abfrage unten ist das Beispiel aus dem Editor weiter oben, und die Ausgabe ist genau das, was dieser Formatter mit den Standardoptionen dafür liefert. Nichts davon wurde von Hand nachgebessert.

Eingefügt
WITH ranked AS (SELECT [c].[CustomerID], [o].[OrderID], [o].[Total], ROW_NUMBER() OVER (PARTITION BY [c].[CustomerID] ORDER BY [o].[Total] DESC) AS rn FROM [dbo].[Customers] [c] INNER JOIN [dbo].[Orders] [o] ON [o].[CustomerID] = [c].[CustomerID] WHERE [o].[OrderDate] >= @StartDate AND [c].[Region] = @Region) SELECT TOP 100 * FROM ranked WHERE rn = 1 AND [Total] > @MinTotal ORDER BY [Total] DESC
Formatierte Ausgabe
WITH
  ranked AS (
    SELECT
      [c].[CustomerID],
      [o].[OrderID],
      [o].[Total],
      ROW_NUMBER() OVER (
        PARTITION BY
          [c].[CustomerID]
        ORDER BY
          [o].[Total] DESC
      ) AS rn
    FROM
      [dbo].[Customers] [c]
      INNER JOIN [dbo].[Orders] [o] ON [o].[CustomerID] = [c].[CustomerID]
    WHERE
      [o].[OrderDate] >= @StartDate
      AND [c].[Region] = @Region
  )
SELECT
  TOP 100 *
FROM
  ranked
WHERE
  rn = 1
  AND [Total] > @MinTotal
ORDER BY
  [Total] DESC

SQL Server-Syntax, die er beherrscht

Ein generischer Formatter verstümmelt dialektspezifische Syntax oder lehnt sie gleich ab. Das sind die SQL Server-Konstrukte, gegen die dieser Formatter getestet wird.

@Parameter

T-SQL-Parameter werden erkannt und nach Namen gruppiert.

[identifier]

Identifier in eckigen Klammern behalten ihre Klammern und die innere Abstandsgestaltung.

TOP (n)

Wird als Teil der SELECT-Klausel formatiert statt abgetrennt.

@@ROWCOUNT

Systemvariablen werden nicht als Parameter gemeldet.

FAQ zum SQL Server-Formatter

Werden @Parameter erkannt?

Ja, und Systemvariablen wie @@ROWCOUNT werden korrekt ausgeschlossen, sodass im Parameter-Panel nur echte Parameter auftauchen. Fülle jeden Parameter einmal aus, und jedes Vorkommen in der Abfrage aktualisiert sich gemeinsam.

Kann es eine Abfrage mit mehreren CTEs formatieren?

Ja. Jede WHERE-Klausel der Abfrage wird nach dem CTE gelistet, zu dem sie gehört, sodass du eine auswählen und als AND/OR-Baum oder Knotengraph bearbeiten kannst, während der Rest der Abfrage unberührt bleibt.

Wird meine Abfrage an einen Server gesendet?

Nein. Alles läuft in deinem Browser, sodass Schemanamen, Tabellennamen und eingebettete Werte deinen Rechner nie verlassen.

Werden Bezeichner in eckigen Klammern mit Leerzeichen oder reservierten Wörtern unterstützt?

Ja. Ein Name wie [Order Details] wird als ein einziger Bezeichner gelesen, samt Klammern und innerer Abstände. Das Leerzeichen im Namen gilt nie als Token-Grenze, und ein reserviertes Wort in Klammern wird nie als Schlüsselwort umgeschrieben.

Kann er eine unvollständige T-SQL-Anweisung formatieren?

Ja. Ein Fragment funktioniert — auch ein blosses WHERE [o].[OrderDate] >= @StartDate — weil nichts von einer vollständigen Analyse abhängt. Das ist der übliche Fall, wenn Sie ein Prädikat aus einer langen gespeicherten Prozedur kopiert haben, um es isoliert zu bearbeiten.

Bleiben Abfrage-Hints wie OPTION (RECOMPILE) erhalten?

Ja. Hints werden an Ort und Stelle durchgereicht, statt umgestellt oder verworfen zu werden. Die formatierte Abfrage ist also weiterhin die Abfrage, die Sie optimiert haben, und der zurückgelieferte Plan derjenige, den Sie gemessen haben.