初次使用 SSMS 修改存儲過程時,點擊工具列「儲存」卻彈出「另存新檔」對話框,令人困惑。本文揭示其設計邏輯與正確操作流程。
現象重現
1. 物件總管 → 可程式性 → 預存程序 → 右鍵「修改」。
2. 編輯視窗開啟,標題列顯示 ALTER PROCEDURE ...。
3. 點擊「儲存」圖示或 Ctrl+S → 彈出「另存新檔」而非直接套用。
設計原理
- SSMS 將「修改」視為開啟一個指令碼檔案,而非直接連線編輯伺服器物件。
- 指令碼標頭自動加上
ALTER PROCEDURE,執行該指令碼(F5 或工具列「執行」)才會將變更部署到伺服器。
- 「儲存」僅將指令碼存成本地
.sql 檔,方便版控、離線編輯、程式碼審查。
正確操作流程
- 修改完成後,按 F5 或點擊「執行」→ 訊息窗格顯示「命令成功完成」。
- (選擇性)再按 Ctrl+S 存檔至本地專案/版控倉庫。
- 物件總管重新整理,確認修改日期已更新。
與 Visual Studio 對比
| 行為 | VS 2003/2005/2008 | SSMS |
| 開啟修改 | Server Explorer 雙擊 → ALTER PROCEDURE | 物件總管右鍵修改 → ALTER PROCEDURE |
| 儲存動作 | Ctrl+S 直接部署到伺服器 | Ctrl+S 僅存本地檔案 |
| 部署動作 | 同儲存 | F5 執行指令碼 |
優缺點評析
- 優點:指令碼即文件,天然支援 Git/SVN 版控、Code Review、CI/CD 整合。
- 缺點:違背「所見即所得」直覺,新手易誤以為存檔即生效,導致變更未部署。
最佳實務建議
- 養成「修改 → F5 執行 → Ctrl+S 存檔」肌肉記憶。
- 專案導向開發:建立「資料庫專案」,所有物件指令碼納入版控,部署走 CI 流程。
- 啟用 SSMS 選項:「執行前確認」→ 減少誤執行風險。
理解 SSMS「指令碼優先」設計哲學,即可避開此坑,並發揮版控與自動化部署優勢。