2026年7月30日 星期四

SSMS 22.7的預覽功能-架構比較


 作者:楊先民  

精誠資訊/恆逸教育訓練中心資深講師

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


微軟在 SSMS 22.7(SQL Server Management Studio)中,終於迎來了社群期盼已久的重量級功能:

架構比較(Schema Compare)預覽版。

過去,SQL Server 開發人員與資料庫管理員(DBA)如果想要比對兩個資料庫之間的資料表、預存程序或檢視表差異,通常必須依賴 Visual Studio 的 SQL Server Data Tools (SSDT)、Azure Data Studio,或是購買第三方的付費工具(如 Redgate SQL Compare)。現在,這項強大的功能直接內建在最熟悉的 SSMS 中,不僅支援資料庫對資料庫的比對,還完美整合了 .dacpac 檔案以及 SQL 專案(SQL Projects)。

本文將以一個實際的企業開發情境為例,拆解 SSMS 22.7 的 Schema Compare 功能,並展示它如何幫我們加速地端與雲端的資料庫部署、生成更新腳本,以及如何反向將資料庫的變更「導入」回 SQL 專案中。

為什麼 SSMS 內建 Schema Compare 如此重要?

DevOps 盛行的時代,資料庫的「版本控制」與「持續整合/持續部署(CI/CD)」一直是痛點。常見的開發流程如下

1. 開發階段:開發人員在當地的測試資料庫(Dev_DB)進行修改,例如新增欄位、修改預存程序。

2. 專案管理:將變更同步到 Git 儲存庫中的 SQL 專案(.sqlproj),並編譯成資料庫架構包(.dacpac)。

3. 部署階段:將 .dacpac 的變更套用到測試環境(QA_DB)與生產環境(Prod_DB)。


在過去,若要在 SSMS 中確認 Dev_DB Prod_DB 到底差了哪些欄位,必須手動寫 T-SQL 查詢 sys.objects 或檢視產生腳本,既費時又容易出錯。

SSMS 22.7 引入的 Schema Compare 徹底解決了這個問題,它提供了視覺化的程式碼差異對比(Visual Diff自動化腳本生成雙向同步的能力。

 

實戰情境設定

為了讓讀者身歷其境,我們設定一個電商系統(E-Commerce)的升級情境:

●來源(SourceEcommerce_Dev(開發環境資料庫)

    • 開發人員剛剛在 Customers 資料表新增了一個 MembershipLevel(會員等級)欄位。
    • 修改了 GetOrderDetails 預存程序,最佳化了查詢效能。
    • 新增了一個名為 v_ActivePromotions 的檢視表(View

●目標(TargetEcommerce_Prod(生產環境資料庫)

    • 目前還是舊版架構,缺少上述變更。

●SQL 專案Ecommerce.sqlproj

    • 團隊用來做 Git 版本控制的 SQL 專案,需要與生產環境的最新狀態(或開發環境)保持同步。


接下來,我們將用多個步驟展示如何利用 SSMS 22.7 的新介面來處理這些任務。


步驟一:啟動 Schema Compare 與設定來源/目標

SSMS 22.7 中,啟動架構比較非常直覺:

1. 開啟 SSMS 22.7,在「物件總管(Object Explorer)」中,對著任意資料庫點選滑鼠右鍵,並且選擇工作

2. 在彈出的選單中,你會看到全新加入的 Schema Compare...」(架構比較) 選項,點擊它。


3.隨後會開啟一個專屬的比較索引標籤。介面上方有兩個主要的區塊:

    • Source(來源):代表你想以哪一個架構為基準(新變更)。
    • Target(目標):代表你想把變更套用到哪裡(舊架構)。




支援的三大類型靈活配對

點擊「Select Source」與「Select Target」的下拉選單,你會發現 SSMS 22.7 支援三種核心物件的任意組合:

  • Database:直接連線到本機或雲端(Azure SQL)的即時資料庫。
  • Data-tier Application File (.dacpac):編譯出來的資料庫架構快照。
  • SQL Project:磁碟上的 .sqlproj 專案檔。

在本例中,我們將 Source 設定為 Ecommerce_Dev 資料庫,將 Target 設定為 Ecommerce_Prod 資料庫。設定完成後,點擊畫面上方的 Compare」(比較) 按鈕。


步驟二:解讀視覺化差異介面(Visual Diff

點擊 Compare 後,SSMS 會在背景讀取兩個資料庫的系統資料表(System Catalogs),並在幾秒鐘內呈現出精美的視覺化比對報告。

 

介面主要分為三個核心區塊:

1. 物件分類與狀態清單(Object Grid

畫面的上半部會將所有有差異的物件分門別類(如 TablesStored ProceduresViews)。每個物件前方都會有一個狀態標籤:

  • Delete(刪除):該物件存在於目標中,但來源中已不存在(代表需要被移除)。
  • Change(變更):該物件在來源與目標中都存在,但內部語法或結構不同。
  • Add(新增):該物件是來源中新寫好的,目標資料庫目前完全沒有。


在我們的範例中,你會看到:

  • Customers 資料表顯示為 Change
  • GetOrderDetails 預存程序顯示為 Change
  • v_ActivePromotions 檢視表顯示為 Add

2. 選取核取方塊(Action Checkbox

在每個物件的左側,都有一個勾選框。這賦予了 DBA 極大的控制權。如果你發現某個變更(例如一個實驗性的預存程序)還不打算部署到生產環境,你可以單獨取消勾選它,這樣在隨後生成的腳本中就不會包含該物件的變更。

 

3. 視覺化程式碼比對(Visual Diff Panes

當你用滑鼠點擊上半部的 Customers 資料表時,下半部會立即帶出類似 Git 或是 VS Code 雙向程式碼比對視窗

  • 左側(Source 顯示 Ecommerce_Dev DDL 語法,其中 [MembershipLevel] VARCHAR(50) NULL 這行會被醒目提示(通常是綠色或藍色陰影),代表這是新加入的。
  • 右側(Target 顯示 Ecommerce_Prod 目前的語法,該行位置會呈現空白或灰色斑馬紋,一眼就能看出落差。


點擊 GetOrderDetails 預存程序時,下半部則會用行號對齊的方式,精準指出哪幾行效能優化的 T-SQL 語法被修改過。這種直覺的視覺設計,讓人在部署前擁有百分之百的信心。

 

步驟三:執行更新——生成更新腳本 vs. 直接套用

當我們確認比對結果無誤,且勾選了需要變更的項目後,SSMS 22.7 提供了兩種將變更推進到目標(Target)的方式。這兩種方式各有其適合的應用場景:

方案 AGenerate Script(生成更新腳本)—— 推薦生產環境使用

對於生產環境(Production)而言,直接線上變更風險極高,標準流程是先審查 SQL 腳本。

1. 點擊工具列的 Generate Script 按鈕。

2. SSMS 會自動為你寫好所有的差量更新 SQL 語法(Differential Script)。

3. 它會自動處理物件相依性。例如:如果新檢視表引用了新欄位,它會聰明地先執行 ALTER TABLE 新增欄位,接著才執行 CREATE VIEW

4. 產生的文檔會包含安全機制(例如預先檢查、事務包裝 BEGIN TRANSACTION),你可以將此 .sql 檔案存檔,送交主管審查或排程在離峰時間執行。


方案 BUpdate(直接套用變更)—— 推薦開發環境使用

如果你是在自己的本機環境、開發環境或測試環境中操作,追求的是效率,不需要繁瑣的審查流程:

1. 直接點擊工具列的 Update 按鈕。

2. 系統彈出警告視窗,提示此操作將直接修改目標資料庫。

3. 點擊確認後,SSMS 會在背景即時執行變更,並在「Output(輸出)」視窗中顯示「Update completed successfully」。

4. 重新整理 Ecommerce_Prod,你會發現 Customers 表已經成功加上了 MembershipLevel 欄位。


高級技巧:將資料庫變更反向導入 SQL 專案(Database to Project)

微軟在 SSMS 22.7 Schema Compare 中特別強調了一個強大的延伸應用:支援將資料庫的最新變更導入(Import)回 SQL 專案(SQL Projects)中

這解決了開發團隊常遇到的「架構漂移(Schema Drift)」問題。有時候,DBA 或資深工程師為了緊急修復生產環境的效能問題(Hotfix),會直接在資料庫上修改預存程序或建立索引,卻忘了把這些修改寫回 Git 儲存庫裡的 SQL 專案。久而久之,專案程式碼就跟現實脫節了。

現在利用 SSMS 22.7,你可以輕鬆修正這個問題:

  1. 重新設定比較
    ○Source(來源):選擇已經被修復、擁有最新架構的即時資料庫 Ecommerce_Prod。
    ○Target(目標):選擇你硬碟中的 SQL 專案檔 Ecommerce.sqlproj。

  2. 執行比對:點擊 CompareSSMS 會將資料庫的即時狀態與專案中的 .sql 檔案逐一對比。

  3. 檢視差異:此時,左側會是資料庫語法,右側會是專案資料夾結構中的特定檔案(例如 dbo/Stored Procedures/GetOrderDetails.sql)。

  4. 導入專案:勾選該變更,並點擊 UpdateSSMS 會直接修改或覆寫專案資料夾下的 .sql 檔案

  5. 完成同步:開啟你的 Git 管理工具(如 Git Changes 視窗),你會看到剛才在資料庫做的修正已經變成專案中的程式碼變更,接下來只要 Commit Push,就能完美讓代碼庫與資料庫同步。

總結:SSMS 22.7 Schema Compare 的三大核心價值

微軟在 SSMS 22.7 中內建架構比較功能,不僅僅是省去切換工具的麻煩,更是對資料庫開發生命週期(Data Lifecycle)的一次重大優化。總結來說,這項功能帶來了三大核心價值:

  1. 降低工具切換成本與學習曲線:資料庫人員不一定習慣使用 Visual Studio 這種重型 IDE。如今在每天都在使用的 SSMS 裡面,就能享受到與 Visual Studio 同等級的資料庫比對與部署體驗。

  2. 極佳的部署安全性:透過視覺化的程式碼對比(Visual Diff)以及「先生成腳本、後執行」的機制,DBA 可以在按下執行鍵前,百分之百掌握每一個 ALTERCREATE DROP 指令,避免誤刪資料的慘劇。

  3. 打通資料庫與 DevOps 的最後一哩路:藉由流暢地在 Database.dacpacSQL Project 之間任意切換來源與目標,不論是要順向部署到雲端,還是要反向同步回 Git 專案,都變得前所未有的簡單。


雖然目前在 SSMS 22.7 中這項功能仍掛著「預覽版(Preview)」的標籤,但其展現出的穩定度與功能完整性,已經足以應付大多數日常的開發與維運場景。建議所有 SQL Server 的開發者與 DBA 儘速升級到 SSMS 22.7,體驗這項能讓工作效率翻倍的神級利器!

 

0 意見:

張貼留言