SQL Server 不支援直接備份/還原或分離/附加從高版本降級至低版本 (如 2008 R2 → 2008、2012 → 2008 R2)。嘗試還原會報錯:資料庫 'xxx' 無法還原,因為它是由較新版本的伺服器建立的...。本文提供兩種經實測可行的降級方案。

版本號對照:SQL 2008 = 10.00.xxxx、SQL 2008 R2 = 10.50.xxxx、SQL 2012 = 11.00.xxxx、SQL 2014 = 12.00.xxxx、SQL 2016 = 13.00.xxxx、SQL 2017 = 14.00.xxxx、SQL 2019 = 15.00.xxxx。


| 選項 | 建議值 | 說明 |
|---|---|---|
| 指令碼目標資料庫引擎版本 | 目標低版本 (如 SQL Server 2008) | 產生相容語法 |
| 資料類型指令碼編寫 | True | 包含資料 |
| 索引/觸發器/條件約束/權限 | True | 完整結構 |
| ANSI 填補/NULL 行為 | True | 相容性 |

.sql) → 在低版本 SSMS 開啟並執行,建立空資料庫結構。
注意:此方法不改變資料庫內部版本號,僅調整查詢最佳化器行為相容性。無法解決備份/還原版本不符問題。Microsoft 已宣告棄用,建議改用 ALTER DATABASE SET COMPATIBILITY_LEVEL。
-- 查詢目前相容性層級
EXEC sp_dbcmptlevel 'MyDatabase';
-- 設定為 SQL Server 2008 (100)
EXEC sp_dbcmptlevel 'MyDatabase', 100;
-- 對應值:80=2000, 90=2005, 100=2008, 110=2012, 120=2014, 130=2016, 140=2017, 150=2019
-- 核心執行動態 SQL
SET @exec_stmt = 'ALTER DATABASE ' + QUOTENAME(@dbname, '[') + ' SET COMPATIBILITY_LEVEL = ' + CAST(@input_cmptlevel AS NVARCHAR(128))
EXEC(@exec_stmt)
| 需求 | 推薦方案 | 理由 |
|---|---|---|
| 正式環境遷移、版本差距大 | 方法一 (腳本+匯入) | 徹底重建低版本資料庫檔案,支援跨大版本 (如 2019→2008) |
| 開發/測試環境、版本相近 | 方法一 (腳本+匯入) | 同樣最穩妥 |
| 僅需調整查詢行為相容性 | ALTER DATABASE COMPATIBILITY_LEVEL | 無需遷移資料,即時生效 |
sqlcmd -i script.sql -S server -d db 執行。SET IDENTITY_INSERT ON。sp_help_revlogin 腳本遷移登入帳號。掌握「產生腳本 + 匯入資料」標準流程,即可應對所有 SQL Server 版本降級遷移需求。