專案經驗分享:將 Sybase 資料庫遷移至 SQL Server 2000。雙方同源但分歧已久,遷移核心在於程式碼轉換與行為驗證。
sysobjects、syscolumns 等系統表欄位與語意不同。DATETIME 精度、MONEY 範圍、IDENTITY 行為差異。GETDATE()、ISNULL()、CONVERT() 格式代碼不同。inserted/deleted 表行為、遞迴觸發控制不同。使用 sp_dbcmptlevel 設定資料庫相容等級:
| 等級 | 對應版本 | 限制關鍵字(不可作物件名) |
|---|---|---|
| 70 | SQL Server 7.0 | BACKUP, DENY, PERCENT, RESTORE, TOP |
| 65 | SQL Server 6.5 | AUTHORIZATION, CASCADE, CROSS, DISTRIBUTED, ESCAPE, FULL, INNER, JOIN, LEFT, OUTER, PRIVILEGES, RESTRICT, RIGHT, SCHEMA, WORK |
| 60 | SQL Server 6.0 | 更多... |
EXEC sp_dbcmptlevel 'dbname', 65 -- 設定為 6.5 相容
相容模式僅影響語法剖析與部分行為,無法解決所有語意差異,不可長期依賴。
遷移非單純語法轉換,而是行為等價驗證。相容模式可作過渡,最終必須原生化。投資完整測試框架,才能確保遷移後系統穩定上線。