首页 > 解决方案 > 处理从 DMV 提取的单行查询中的注释的 SQL 格式化选项

问题描述

我是一名 DBA,因此我从各种 dmv 中获取大量查询文本来检查问题查询。我目前使用Poor Man T-SQL 格式化程序。我遇到的问题是当从 dmv 中提取查询文本时,例如这个代码块:

SQL 服务器版本 2012 或更高版本顺便说一句。

SELECT P.spid,
    P.STATUS,
    P.hostname,
    P.loginame,
    P.cpu,
    R.start_time,
    R.command,
    P.program_name,
    TEXT
FROM sys.dm_exec_requests R
CROSS JOIN master.dbo.sysprocesses P
CROSS APPLY sys.dm_exec_sql_text(P.sql_handle)
WHERE 1 = 1 
    and P.STATUS NOT IN ('sleeping', 'background')
    AND R.session_id = P.spid
    AND P.spid <> @@spid --ignore this query

当我从 TEXT 列中获取一个值并粘贴到一个新窗口时,我经常会遇到糟糕的临时查询,它看起来像我刚刚写的这个无意义的查询

SELECT X, Y --OPTIONAL, Z FROM ALPHABET as abc --FOR SPECIAL CASES LEFT JOIN AGGREGATECOUNT as A ON A.id = abc.id where 4>3 --to deal with non english AND 1=1

当使用我尝试过的工具(例如poorman t-sql formattor)进行格式化时,如果不手动跳过注释,我就无法摆脱它的“单行”状态。是否有任何格式化程序(用于 ssms 或 notepad++ 的插件是一个加号。)可以处理这种情况?还是我应该以不同的方式拉出文本以避免所有换行符丢失的问题?例如,使用我的工具格式化以上内容会产生

SELECT 
     X
    ,Y --OPTIONAL, Z FROM ALPHABET as abc --FOR SPECIAL CASES LEFT JOIN AGGREGATECOUNT as A ON A.id = abc.id where 4>3 --to deal with non english AND 1=1

如果不存在好的工具,是否有任何改进我当前流程的技巧,包括在“明显”评论后手动添加新行?

我的目标是:

SELECT 
     X
    ,Y --OPTIONAL
    , Z 
FROM ALPHABET as abc 
--FOR SPECIAL CASES 
LEFT JOIN AGGREGATECOUNT as A ON A.id = abc.id 
WHERE 4>3 
--to deal with non english
AND 1=1

标签: sqlsql-servertsqlssmsformatter

解决方案


推荐阅读