資料庫結構變更若無版控,極易造成環境不一致、回滾困難。利用 VS 2010 Database Project (SQL Server Database Project) 搭配 Subversion (SVN),即可將結構定義檔案化、版本化、自動化部署。
核心工具鏈
- VS 2010 (或 2012/2013/2015/2017/2019 SSDT) → 專案類型 SQL Server 2008 Database Project (對應目標版本)。
- Schema Compare (資料 → 結構描述比較) → 雙向同步:
- Database → Project:匯入現有資料庫結構。
- Project → Database:產生部署腳本 / 直接發布。
- VisualSVN Server (伺服器端) + AnkhSVN (VS 整合外掛) → 版本控制。
建立資料庫專案並匯入現有結構
- File → New → Project → Database → SQL Server → SQL Server 2008 Database Project,命名
AdventureWorksDB。
- 專案右鍵 → Import → Database Objects and Settings。
- 精靈選擇來源連線 (AdventureWorks2012)、匯入選項 (Schema、Permissions、Extended Properties 等) → 完成。專案將產生數百個
.sql 檔案,每個物件一檔。
加入版本控制 (AnkhSVN)
- 方案總管右鍵方案 → Add Solution to Subversion。
- 輸入 Repository URL (如
https://svn-server/svn/DBProjects/AdventureWorksDB),認證送出。
- 後續開發:修改專案中
.sql 檔 → Commit;團隊成員 Update 取得最新結構。
日常工作流:Schema Compare 雙向同步
| 場景 | 操作方向 | 步驟 |
| 開發機修改表結構 (SSMS) | Database → Project | VS 選單 Data → Schema Compare → Source: 資料庫連線, Target: 專案 → Compare → 勾選變更 → Update 更新專案檔 → Commit。 |
| 專案中調整索引/欄位 | Project → Database | Schema Compare → Source: 專案, Target: 目標資料庫 (Dev/QA/Prod) → Generate Script 產生部署 .sql → 審核 → 執行 / 直接 Update 發布。 |
| 新環境建立 | Project → Database | 專案右鍵 Deploy (需先設定 Target Connection String) → 自動建立/更新完整結構。 |
進階:預部署/後部署腳本
- 專案資料夾 Scripts → Pre-Deployment:資料遷移、關閉限制、備份關鍵表。
- Post-Deployment:種子資料 (MERGE INTO)、啟用限制、重建統計資料。
- 部署時自動包含在產生腳本中,確保資料與結構同步。
優勢總結
- 結構變更可追溯、可比較、可回滾 (SVN 歷史)。
- 部署腳本自動產生,減少手寫 SQL 錯誤。
- 支援多環境參數化 (專案屬性 → Debug/Release 不同連線字串)。
- 整合 CI/CD (Azure DevOps / Jenkins) 實現資料庫持續部署。