適用情境
- 專案需部署至舊版 SQL Server(2005/2000)環境。
- 無法直接還原 2008 備份檔至低版本(不支援跨版本還原)。
- 需將結構描述與資料分別遷移。
階段一:產生相容舊版的結構描述腳本
- 開啟 SSMS 連線至 SQL Server 2008 執行個體。
- 在「物件總管」右鍵目標資料庫 → 工作 → 產生指令碼。
- 精靈步驟關鍵設定:
- 選擇資料庫:勾選「為所選資料庫中的所有物件產生指令碼」。
- 設定指令碼選項(進階):
- 所有「資料表/檢視表選項」設為
True(索引、觸發器、檢查條件約束等)。
編寫建立資料庫的指令碼 = True。
指令碼目標伺服器版本 = SQL Server 2005(或 2000)。
資料類型指令碼編寫目標 = 對應版本。
- 完成精靈,會在新查詢視窗產生完整 DDL 腳本。
階段二:在目標舊版伺服器建立結構描述
- 在產生的腳本視窗右鍵 → 連接 → 變更連接,連線至 SQL Server 2005/2000。
- 按 F5 執行腳本,建立資料庫、資料表、索引、預存程序等結構描述。
- 若報錯(如 2000 不支援
MAX 指定子),需手動修正腳本後重跑。
階段三:遷移資料(兩種方式擇一)
方式 A:使用「匯出資料」精靈(圖形化、適合一次性)
- 在 SSMS 2008 連線來源資料庫 → 右鍵 → 工作 → 匯出資料。
- 資料來源:SQL Server Native Client 10.0,目標:SQL Server Native Client(對應舊版)。
- 選擇「從來源資料庫複製資料表與檢視表」,勾選所有表,可逐表編輯對應關係。
- 執行封裝完成資料搬移。
方式 B:在產生腳本時勾選「資料」(適合自動化/版控)
在階段一的「設定指令碼選項」進階頁面,將 產生資料的指令碼 設為 True。產出的腳本將包含 INSERT INTO ... VALUES ... 陳述式,直接在舊版伺服器執行即可同時建立結構與灌入資料。
注意:大量資料會產生極大腳本檔(數百 MB 以上),執行緩慢且易逾時,建議大資料表仍用匯出精靈或 BCP/SSIS。
常見相容性陷阱與修正
| 功能 | 2008 語法 | 2005/2000 相容寫法 |
| 日期時間型別 | DATE, TIME, DATETIME2 | 改用 DATETIME 或 SMALLDATETIME |
| 大值型別 | VARCHAR(MAX), NVARCHAR(MAX) | 改用 VARCHAR(8000), NVARCHAR(4000) 或 TEXT/NTEXT(已淘汰) |
| MERGE 陳述式 | 支援 | 改用 INSERT/UPDATE/DELETE 分開處理 |
| 稀疏資料行 | 支援 | 移除 SPARSE 關鍵字 |
| 篩選索引 | 支援 | 移除 WHERE 子句 |
驗證清單
- 核對資料表、索引、外鍵、預存程序、函數、檢視表數量與來源一致。
- 抽樣比對關鍵資料表筆數與關鍵欄位值。
- 執行應用程式整合測試,確認無相容性錯誤。