
作者:楊先民
精誠資訊/恆逸教育訓練中心資深講師
※網路引用請註明完整出處
微軟在 SSMS 22.7(SQL Server Management Studio)中,除了推出大家引頸期盼的「架構比較(Schema Compare)」之外,還悄悄塞入了一個對 T-SQL 開發人員與 DBA 而言,堪稱「史詩級」的重大生產力更新:內建 SQL 格式化工具(SQL Formatter)預覽版。
過去數十年來,SSMS 一直缺乏一個好用的原生程式碼排版功能。為了讓雜亂無章的 T-SQL 變得易讀,團隊成員必須各憑本事:有人習慣手動縮排,有人依賴線上的 Poor Man's T-SQL Formatter,更有許多企業會花大筆預算採購紅門(Redgate SQL Prompt)或 ApexSQL 等第三方付費套件。
現在,這個困擾大家已久的痛點終於迎來了解方!
SSMS 22.7 直接在核心中內建了官方的 SQL 格式化引擎。本文將以實務開發者的視角,為您深度拆解這個新功能的運作機制、客製化設定、快捷鍵,以及它如何與 DevOps 整合,幫團隊建立牢不可破的程式碼規範(Coding Standards)。
為什麼我們需要原生的SQL Formatter?
在大型資料庫專案或團隊協作中,每個人編寫
SQL 的習慣都不盡相同。舉例來說,光是 SELECT 的欄位排版、JOIN 的對齊方式,或是關鍵字究竟要大寫(SELECT)還是小寫(select),就存在著各種流派。
當這些格式迥異的程式碼被提交到 Git 等版本控制系統時,會引發一個災難性的後果:程式碼差異(Code Diff)變得極度混亂。明明只是修改了一個條件,卻因為整段程式碼被重新排版,導致 Pull Request (PR) 審查時出現滿滿的綠色與紅色衝突,嚴重干擾程式碼審查(Code Review)的效率。
SSMS 22.7 內建的 SQL Formatter,正是為了解決這個痛點而生。它具有以下三大核心優勢:
- 完全免費且無縫整合:內建於 SSMS 查詢編輯器中,不需額外安裝任何工作負載、外掛或第三方元件。
- 基於官方 ScriptDOM 引擎:此格式化功能完全基於微軟開源的 .NET T-SQL 解析庫——ScriptDOM(SqlScriptDOM)。這意味著它能百分之百精準理解 T-SQL 的語法結構,絕非單純的字串取代,排版正確性極高。
- 支援專案級組態管理:除了個人 IDE 設定,它還完美支援 .editorconfig 檔案,讓整個團隊能自動套用同一套排版邏輯。
如何在SSMS 22.7中呼叫SQL Formatter?
微軟為這個功能設計了非常直覺的觸發方式,主要有以下三種:
方法一:右鍵滑鼠專家(Context
Menu)
在任何連線的 .sql 查詢視窗中,直接點擊滑鼠右鍵,在彈出的選單中,你會看到全新加入的 「Format SQL (Preview)」(繁體中文版通常顯示為結構描述格式化或 Format SQL (預覽))。點擊後,整份文件的程式碼就會瞬間整齊劃一。
方法二:神速鍵盤組合(Keyboard
Shortcut)
對於雙手不想離開鍵盤的進階核心開發者,請牢記這組全新的黃金快捷鍵:
Ctrl + K , Ctrl + Q
這組快捷鍵非常聰明:
- 如果你沒有選取任何文字,按下快捷鍵會格式化整份 SQL 文件。
- 如果你只選取了其中幾行(例如一段非常複雜的子查詢),按下快捷鍵就只會針對被選取的區塊進行排版,完全不會更動到檔案的其他部分。
- UPPERCASE:強迫所有關鍵字一律轉大寫(傳統 DBA 最愛的嚴謹風格)。
- lowercase:一律轉小寫(現代開發人員偏好的輕量風格)。
- PascalCase:首字母大寫,例如 Select、From(特定物件命名流派使用)。
- Indentation Size:自訂按下一格 Tab 鍵等於多少個空白(預設通常為 4)。
- Align Clause Bodies:是否將子句的本體對齊。例如讓 FROM 和 WHERE 後面的條件欄位在垂直線上完全對齊。
- Align Column Definitions / SET Clauses:在 CREATE TABLE 或 UPDATE 的 SET 語句中,將資料型態或等號(=)對齊,畫面會變得極度療癒。
- 透過調整此功能,你可以強制讓 SELECT 欄位清單、WHERE 的多個 AND/OR 條件,或者是 INSERT INTO 的 VALUES 內容,通通各自獨立一行(Each item gets its own line)。
- 同時,你也能設定 JOIN、FROM 等主關鍵字是否必須強迫換行開始。
- 開啟此選項後,格式化工具會自動在每句獨立的 T-SQL 結尾補上分號(;),確保代碼具備長遠的向前相容性。
- 只要這個開關一打開,每當你按下 Ctrl + S 儲存 .sql 檔案時,SSMS 就會在背景瞬間完成排版並儲存!
- 這意味著開發人員完全不需要刻意去按格式化快捷鍵,只要有記得存檔,進到 Git 儲存庫的代碼就絕對是乾淨、標準的。
方法三:編輯選單(Edit Menu)
你也可以透過 SSMS 頂部功能列的 「編輯 (Edit)」
豐富的客製化排版設定(Options)
微軟深知「排版風格是極度個人化且主觀的」。因此,這個功能提供了相當豐富的微調選項。
你可以透過頂部選單的 「工具 (Tools)」
1. 關鍵字大小寫控制(Keyword Casing)
這是最基本的規範。你可以決定系統遇到
SELECT、FROM、WHERE、LEFT JOIN、BEGIN...END 等系統關鍵字時該如何轉換:
2. 縮排與對齊(Indentation & Alignment)
好的縮排能讓巢狀查詢(Nested
Queries)或子查詢(Subqueries)的層級一目了然:
3. 多行列表與換行邏輯(Multi-line List Options)
當一條 SELECT 語句要查詢 20 個欄位時,擠在同一行簡直是災難。
4. 補上分號結束字元(Include Semicolons)
雖然目前的 SQL Server
T-SQL 語法在大多數情況下不寫分號(;)也能正常執行,但微軟官方早已明確認定「不加分號」是未來將被廢棄(Deprecated)的語法習慣。
企業級團隊利器:Format on Save 與 .editorconfig
如果只是能在自己的電腦上排版,那這項新功能頂多算是一個「好用的小工具」。微軟真正厲害的部署在於它與
Database DevOps 的深度整合。
絕招一:Format on Save(存檔時自動格式化)
當你在 SSMS 22.7 中開發 SQL 專案(SQL Projects)或管理指令碼資料夾時,可以在設定中勾選 「Format on Save」 選項。
- 只要這個開關一打開,每當你按下 Ctrl + S 儲存 .sql 檔案時,SSMS 就會在背景瞬間完成排版並儲存!
- 這意味著開發人員完全不需要刻意去按格式化快捷鍵,只要有記得存檔,進到 Git 儲存庫的代碼就絕對是乾淨、標準的。
絕招二:跨團隊的
.editorconfig 支援
每位工程師在 SSMS 裡設定的個人偏好(例如有人喜歡大寫,有人喜歡小寫)往往很難強制作為公司規範。為了防止團隊內部「格式大戰」,SSMS 22.7 導入了對 .editorconfig 程式碼組態檔的支援。
你可以在 SQL 專案的根目錄下放置一個 .editorconfig 檔案,並寫入類似以下的宣告:
當團隊成員用他們的 SSMS 開啟這個專案時,SSMS 會自動略過成員個人的 IDE 設定,強制改用這份 .editorconfig 的規則來執行格式化。這完美達成了與 Visual
Studio 相同等級的程式碼治理解決方案(Linting
Experience)。
實戰前後對比:這功能到底有多神
我們來看一個實際的程式碼範例。許多資淺工程師或從應用程式自動產生的 SQL,往往長得像這樣(雜亂無章、擠在同一行、大小寫混雜):
當我們在 SSMS 22.7 中按下 Ctrl + K , Ctrl + Q 之後,系統會依據官方預設的嚴謹規範,自動將其重構為以下極具專業美感的結構:
改變之處顯而易見:
- 所有的 T-SQL 關鍵字自動修正為標準大寫。
- SELECT 的欄位自動分行並對齊縮排,極好閱讀。
- FROM、LEFT JOIN、WHERE 換行靠左對齊,清晰呈現語法邏輯。
- 自動在語句最後方補上了正確的分號(;)。
結論與展望
微軟在 SSMS 22.7 中正式將 SQL
Formatter 以內建、免費的形式提供給全球的資料庫專業人士,無疑是為高壓的維運與開發注入了一劑強心針。
雖然它目前還處於「預覽版(Preview)」階段,某些更進階的複雜排版規則(例如特定 CTE 語句的細緻對齊、視窗函數的斷行微調)仍在陸續豐富中;但它憑藉著 ScriptDOM
的高穩定度語法解析、Format on Save 的流暢體驗以及 .editorconfig 的團隊規範整合能力,已經展現出全面取代許多輕量級第三方排版外掛的氣勢。
沒有留言:
張貼留言