SQL Server Migration Assistant for Access (SSMA) 是微軟免費提供的遷移工具,能自動化處理結構描述轉換、資料移轉、查詢轉檢視表等大部分工作。但企業級遷移專案中,仍需注意數項關鍵限制與對策。
環境需求
- .NET Framework 2.0+
- J# 2.0 可轉散發套件
- 至少 1 GB RAM
SSMA 運作流程與四面板介面
- 新增專案 → 選擇目標 SQL Server 版本
- Access 中繼資料面板:新增一或多個 .mdb/.adp 檔案
- SQL Server 連線面板:設定目標伺服器連線
- 結構描述轉換:將 Access 結構描述轉換為 SQL Server 結構描述 (僅產生 SSMA 內部模型,不立即建立物件)
- 錯誤/警告/資訊標記檢視:核心價值所在,詳細記錄轉換問題
- 類型對應調整:自訂資料類型、預設值、索引對應規則
- 查詢轉換:Access 查詢 → SQL Server 檢視表,可在 SSMA 中編輯修正
- 資料移轉:執行實際資料搬移
四大關鍵問題與對策
1. 不支援的 Access 函數無法自動轉換
現象:DateDiff、IIf、DLookup、Nz 等 Access 專有函數標記為「無法轉換」。
對策:
- 在 SSMA 中編輯查詢,手動改寫為 T-SQL 等效邏輯 (
CASE WHEN、DATEDIFF、ISNULL/COALESCE)
- 建立對照表,批次處理常見函數轉換模式
- 複雜 VBA 函數需改寫為 T-SQL 純量函數或 CLR 函數
2. 表單/報表/巨集/模組無法遷移
現象:SSMA 僅處理資料層 (資料表、查詢、關聯、索引),應用層物件完全忽略。
對策:
- 採用「漸進式遷移」:先遷資料層,前端暫時透過連結資料表連接 SQL Server
- 長期規劃:重寫前端為 .NET (WinForms/WPF/ASP.NET) 或 Access 專案 (.adp)
- 評估第三方工具 (如 AccessToSQL) 輔助表單轉換
3. 資料類型對應預設值不一定合適
常見差異:
| Access 類型 | SSMA 預設對應 | 建議調整 |
| AutoNumber | INT IDENTITY | 大資料量考慮 BIGINT |
| Yes/No | BIT | 確認非 NULL 需求 |
| Memo | NVARCHAR(MAX) | 舊版相容用 NTEXT |
| Currency | MONEY | 精確計算建議 DECIMAL(19,4) |
| OLE Object | VARBINARY(MAX) | 檔案流考慮 FILESTREAM |
4. 大量資料移轉效能與容錯
優化建議:
- 移轉前卸載索引/條件約束,移轉後重建
- 分批次移轉 (SSMA 支援批次大小設定)
- 啟用「資料驗證」選項,移轉後自動比對筆數/檢查碼
- 離線時段執行,避免鎖衝突
遷移專案檢核清單
- [ ] 完整清查 Access 物件清單 (資料表、查詢、表單、報表、模組、巨集)
- [ ] 識別所有 VBA 程式碼與專有函數使用處
- [ ] 在測試環境完整跑一次 SSMA 遷移,收集所有錯誤/警告
- [ ] 建立類型對應與函數轉換標準對照表
- [ ] 規劃前端應用程式遷移路線圖 (連結資料表 → .adp → 重寫)
- [ ] 制定資料驗證與 UAT 測試腳本
- [ ] 準備回滾方案 (備份 .mdb、記錄遷移腳本)
結語
SSMA 是遷移專案的「加速器」而非「全自動機」。善用其結構描述轉換、錯誤報告、類型對應自訂功能,配合人工審查與測試,才能確保遷移品質與專案時程。