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 列出,你可以挑一个用 AND/OR 树或节点图来编辑,查询的其余部分保持不变。
我的查询会被发送到服务器吗?
不会。一切都在你的浏览器中运行,因此库表名和任何内嵌的值都不会离开你的机器。
带空格或保留字的方括号标识符能处理吗?
能。像 [Order Details] 这样的名字会被读作一个标识符,方括号和内部空格都算在内,名字里的空格绝不会被当成词法边界,方括号里的保留字也绝不会被当作关键字改写大小写。
能格式化不完整的 T-SQL 语句吗?
能。片段就可以用——包括只有 WHERE [o].[OrderDate] >= @StartDate——因为没有任何环节依赖完整解析。从一个很长的存储过程里复制出一段谓词、单独拿出来改,正是最常见的用法。
OPTION (RECOMPILE) 这类查询提示会被保留吗?
会。提示会在原位置带过,不会被重排或丢弃,所以格式化后的查询仍是你正在调优的那条查询,拿回的执行计划也仍是你在测量的那一个。