2026年7月30日 星期四

SSMS 22.7的預覽功能-內建格式化工具

 


作者:楊先民  
精誠資訊/恆逸教育訓練中心資深講師


※網路引用請註明完整出處


微軟在 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,正是為了解決這個痛點而生。它具有以下三大核心優勢:

  1. 完全免費且無縫整合:內建於 SSMS 查詢編輯器中,不需額外安裝任何工作負載、外掛或第三方元件。
  1. 基於官方 ScriptDOM 引擎:此格式化功能完全基於微軟開源的 .NET T-SQL 解析庫——ScriptDOMSqlScriptDOM。這意味著它能百分之百精準理解 T-SQL 的語法結構,絕非單純的字串取代,排版正確性極高。
  1. 支援專案級組態管理:除了個人 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:首字母大寫,例如 SelectFrom(特定物件命名流派使用)。
  • 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)。
  • 同時,你也能設定 JOINFROM 等主關鍵字是否必須強迫換行開始。
  • 開啟此選項後,格式化工具會自動在每句獨立的 T-SQL 結尾補上分號(;,確保代碼具備長遠的向前相容性。
  • 只要這個開關一打開,每當你按下 Ctrl + S 儲存 .sql 檔案時,SSMS 就會在背景瞬間完成排版並儲存
  • 這意味著開發人員完全不需要刻意去按格式化快捷鍵,只要有記得存檔,進到 Git 儲存庫的代碼就絕對是乾淨、標準的。


方法三:編輯選單(Edit Menu

你也可以透過 SSMS 頂部功能列的 「編輯 (Edit)  「進階 (Advanced) 選單中找到格式化指令。

 

豐富的客製化排版設定(Options)

微軟深知「排版風格是極度個人化且主觀的」。因此,這個功能提供了相當豐富的微調選項。

你可以透過頂部選單的 「工具 (Tools)  「選項 (Options)  展開 SQL Formatter (Preview) 來調整你的專屬風格。以下是幾個最具代表性的設定核心:

1. 關鍵字大小寫控制(Keyword Casing

這是最基本的規範。你可以決定系統遇到 SELECTFROMWHERELEFT JOINBEGIN...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 的欄位自動分行並對齊縮排,極好閱讀。
  • FROMLEFT JOINWHERE 換行靠左對齊,清晰呈現語法邏輯。
  • 自動在語句最後方補上了正確的分號(;)。


結論與展望

微軟在 SSMS 22.7 中正式將 SQL Formatter 以內建、免費的形式提供給全球的資料庫專業人士,無疑是為高壓的維運與開發注入了一劑強心針。

雖然它目前還處於「預覽版(Preview)」階段,某些更進階的複雜排版規則(例如特定 CTE 語句的細緻對齊、視窗函數的斷行微調)仍在陸續豐富中;但它憑藉著 ScriptDOM 的高穩定度語法解析Format on Save 的流暢體驗以及 .editorconfig 的團隊規範整合能力,已經展現出全面取代許多輕量級第三方排版外掛的氣勢。


沒有留言:

張貼留言