資料庫在項目開發中幾乎是必不可少的元素,sql Server 相信大家都特別熟悉吧,那麼是否遇到過這樣一個問題呢:
在分析資料庫或者部署資料庫的時候,出現了資料庫不相容的問題。拿到的是08或者12版本的資料庫,結果部署的伺服器只裝有05或08的sqlserver,一個小小的相容問題是不是很讓有頭疼啊。
通用的解決方案是:匯出資料庫指令碼,備份資料庫。然後在Sql Server 2005或08的伺服器上建立資料庫,然後通過備份檔案還原資料。這樣太麻煩了。既然sql的功能如此強大,肯定有考慮到相容性的問題,如果修改一下相容性就會省好多時間,那多方便呀。在網上找了半天,這個方法還真有。
修改資料庫相容版本
文法
ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 |110 }
參數
database_name
要修改的資料庫的名稱。
COMPATIBILITY_LEVEL { 80 | 90 | 100 |110}
要使資料庫與之相容的 SQL Server 版本。該值必須為下列值之一:
= SQL Server 2000
= SQL Server 2005
= SQL Server 2008
= SQL Server 2012
備忘
對於所有 SQL Server 2012 安裝,預設的相容層級都為 110。除非 model 資料庫有更低的相容層級,否則 SQL Server 2012 中建立的資料庫會設定為該層級。將資料庫從 SQL Server 的任何早期版本升級到 SQL Server 2012 時,如果資料庫的相容層級不在 80 以下,則該資料庫將保留其現有的相容層級。升級相容層級低於 80 的資料庫會將資料庫的相容層級設定為 80。這既適用於系統資料庫,也適用於使用者資料庫。使用 ALTER DATABASE 可更改資料庫的相容層級。若要查看資料庫的當前相容層級,請查詢
sys.databases 目錄檢視中的 compatibility_level 列。
利用相容層級獲得向後相容
相容層級隻影響指定資料庫的行為,而不影響整個伺服器的行為。相容層級只實現與 SQL Server 的早期版本保持部分向後相容。通過將相容層級用作臨時性的遷移協助工具輔助,可解決相關相容層級設定控制的行為之間存在的版本差異問題。如果現有 SQL Server 應用程式受到 SQL Server 2012 中行為差異的影響,請對該應用程式進行轉換,使之能正常運行。然後使用 ALTER DATABASE 將相容層級更改為 110。資料庫的新相容性設定將在該資料庫下次成為當前資料庫(無論是在登入時作為預設資料庫還是在 USE
語句中指定)時生效。
最佳實務
如果在使用者串連到資料庫時更改相容層級,可能會使活動查詢產生不正確的結果集。例如,如果在編寫查詢計劃時相容層級發生更改,則編寫後的計劃可能同時基於舊的和新的相容層級,從而造成計劃不正確,並可能導致結果不準確。此外,如果將計劃放在計畫快取中供後續的查詢重用,則問題可能更加複雜。為了避免查詢結果不準確,建議您使用以下過程來更改資料庫的相容層級:
. 通過使用 ALTER DATABASE SET SINGLE_USER,將資料庫設定為單使用者訪問模式。
. 更改資料庫的相容層級。
. 通過使用 ALTER DATABASE SET MULTI_USER,將資料庫設為多使用者訪問模式。
有關設定資料庫訪問模式的詳細資料,請參閱 ALTER DATABASE (Transact-SQL)。
--擷取資料庫相容層級 SELECT name ,compatibility_level ,recovery_model_desc FROM sys.databases WITH(NOLOCK) --將使用者佈建為單使用者訪問模式 ALTER DATABASE test SET SINGLE_USER --修改資料庫的相容層級 ALTER DATABASE TEST SET COMPATIBILITY_LEVEL = 90 --or EXEC sp_dbcmptlevel TEST, 90; GO --將使用者佈建為多使用者訪問模式 ALTER DATABASE test SET MULTI_USER
文法
sp_dbcmptlevel [ [ @dbname = ] name ]
[ , [ @new_cmptlevel = ] version ]
參數
[ @dbname = ] name
要為其更改相容層級的資料庫的名稱。資料庫名稱必須符合標識符的規則。name 的資料類型為 sysname,預設值為 NULL。
[ @new_cmptlevel = ] version
資料庫要與之相容的 SQL Server 的版本。version 的資料類型為 tinyint,預設值為 NULL。該值必須為下列值之一:
= SQL Server 2000
= SQL Server 2005
= SQL Server 2008
= SQL Server 2012
傳回碼值
0(成功)或 1(失敗)
結果集
如果未指定任何參數或未指定 name 參數,則 sp_dbcmptlevel 將返回錯誤。
如果指定 name 但未指定 version,則 資料庫引擎將返回一條訊息,顯示指定資料庫的當前相容層級。
備忘
有關相容層級的說明,請參閱 ALTER DATABASE 相容層級 (Transact-SQL)。
許可權
只有資料庫擁有者、sysadmin 固定伺服器角色和 db_owner 固定資料庫角色的成員(前提是您要更改當前資料庫)才能執行此過程。