SQL 指令自動排版 - 使用 VSCode
1 |
從 Log 或參數拿到成串未分行的 SQL 指令,或是查程式碼遇到複雜的 SQL 指令,會讓它規則化一點方便閱讀,除了手工整理,自動排版工具也是種選擇。
例如以下這段縮排、大小寫無規則的 T-SQL:(我猜有 Coding-Style 潔癖的人會想把作者的頭扭下來)
;WITH SupportCTE (RowNum, Name, CodeName, Engineer,Engineers) AS
(
select 1, A.Name, A.CodeName,
MIN(B.Engineer), CAST(MIN(B.Engineer)
as varchar(max)) as Engineers from AppSystem A join AppSupport B
on A.Name = B.AppName Group By A.Name, A.CodeName
union all
SELECT A.RowNum + 1, A.Name, A.CodeName, B.Engineer,
CAST(A.Engineers + ', ' + B.Engineer AS VARCHAR(MAX)) As Supports
FROM SupportCTE A JOIN AppSupport B ON A.Name = B.AppName AND B.Engineer > A.Engineer
)
SELECT * FROM SupportCTE
SQL 指令排版工具的選擇不少,T-SQL 的話有一套歷史悠久的 Poor Man's T-SQL Formatter,提供 Visual Studio 擴充套件、SSMS 擴充套件等形式,還有線上版。這兩年我愛上 VSCode 的輕巧及數不盡的擴充套件,除了用它寫 C# 以外的語言(例如:C/C++、Python、PowerShell、GO、node.js),也常把它當成跑小工具的平台(例如:GitGraph),這篇文章就介紹怎麼用 VSCode 自動排版 SQL。
微軟有個 mssql extension for VSCode,其實也有內建 Formatter 功能,安裝之後編輯 .sql 檔只要按下 Ctrl-K、Ctrl-D 就會自動排版,只是結果不甚理想:
Poor Man 也有出 VSCode 套件。在擴充套件區輸入 Poor Man 找到 Poor Man's T-SQL Formatter:
安裝後,.sql 編輯視窗的右鍵選單會多出 Format SQL (Ctrl+K Shift-F) 選項:
執行即可用它排出縮排規則、大小寫更一致的效果:
不過 Poor Man 只針對 T-SQL,用在其他 DB 如 ORACLE 時會出現警示,執行效果不佳,例如:
create or replace function FN_SQR(n number)
return number is FunctionResult number;
begin
FunctionResult := n * n;
DBMS.SLEEP(0.01); dbms_output.put_line(n);
return(FunctionResult);
end FN_SQR;
試圖用 Poor Man 重排時會彈出無法解析的提示,若選擇強制執行(Format Anyway),會變成:
我找到另一套老牌 SQL Formatter (基於 sql-formatter-plus npm Package):
它支援 Standard SQL、Couchbase N1QL、IBM DB2、Oracle PL/SQL 等多種資料庫:
不過,SQL Formatter 也將自己註冊成 .sql 的自動排版工具,按下 Ctrl-K、Ctrl-D 時會跳出提示要你選擇 SQLServer Extension 或是 SQL Formatter,更快一點的做法是用右鍵選單 Format Document with...:
執行結果如下,不如 Poor Man 賞心悅目,但至少關鍵字都有正確解析。
老話一句,兩套都是開源專案,覺得不順手用得不開心是自己能力不足,與開發者無關。哈!
Introduce to how to format SQL script with VSCode.
Comments
# by Charlie Ku
我想補充一下 我看到黑暗執行序大大分享,馬上就把自己的 VS Code 也裝上SQL Formatter 但是嘗試了一下發現沒有效果 後來我又去查了怎麼用找到了另一個插件"SQL Formatter Mod",可以正常工作,使用方式需要自己先設置快捷鍵 補充一下我使用的SQL是Oracle