SQL Server(T-SQL)フォーマッター

T-SQL のクエリを貼り付ければ、一貫して整形された SQL が得られます。角括弧の [識別子]、@パラメーター、TOP や OPTION といった SQL Server の句にも対応しています。

SQL Server のクエリ、整形前と整形後

下の未整形のクエリは、上のエディタに読み込まれているサンプルそのものです。出力はデフォルト設定でこのフォーマッターが返す内容そのままで、手作業で整えた箇所はありません。

貼り付けた内容
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
整形後の出力
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 の構文

汎用のフォーマッターは方言固有の構文を壊すか、そもそも受け付けません。ここに挙げるのは、このフォーマッターがテストで確認している SQL Server の構文です。

@Parameter

T-SQL のパラメーターは検出され、名前でグループ化されます。

[identifier]

角括弧の識別子は角括弧と内部の空白をそのまま保ちます。

TOP (n)

切り離されるのではなく、SELECT 句の一部として整形されます。

@@ROWCOUNT

システム変数はパラメーターとして報告されません。

SQL Server フォーマッターのよくある質問

@パラメーターは検出されますか?

はい。@@ROWCOUNT のようなシステム変数は正しく除外されるため、パラメーターパネルには本物のパラメーターだけが表示されます。各パラメーターを一度入力すれば、クエリ内のすべての出現箇所がまとめて更新されます。

複数の CTE を含むクエリを整形できますか?

はい。クエリ内のすべての WHERE 句が、それが属する CTE ごとに一覧されるので、1 つを選んで AND/OR ツリーやノードグラフとして編集でき、クエリの残りの部分はそのまま保たれます。

クエリはサーバーに送信されますか?

いいえ。すべてブラウザ内で動作するため、スキーマ名、テーブル名、埋め込まれた値があなたのマシンから出ることはありません。

空白や予約語を含む角かっこ付き識別子は扱えますか?

はい。[Order Details] のような名前は、角かっこと内部の空白も含めて 1 つの識別子として読まれます。名前の中の空白がトークンの区切りと見なされることはなく、角かっこ内の予約語がキーワードとして書き換えられることもありません。

部分的な T-SQL 文でも整形できますか?

はい。完全な解析に依存しないため、断片でも動きます。WHERE [o].[OrderDate] >= @StartDate だけでも構いません。長いストアドプロシージャから述語をコピーして単独で手を入れるときの、よくある使い方です。

OPTION (RECOMPILE) のようなクエリヒントは保たれますか?

はい。ヒントは並べ替えられたり削られたりせず、その場所のまま通されます。整形後のクエリはチューニング対象のクエリのままで、返ってくる実行プランも計測していたものと同じです。