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) のようなクエリヒントは保たれますか?
はい。ヒントは並べ替えられたり削られたりせず、その場所のまま通されます。整形後のクエリはチューニング対象のクエリのままで、返ってくる実行プランも計測していたものと同じです。