天天看點

資料庫語句進階應用之修改資料庫相容版本

資料庫在項目開發中幾乎是必不可少的元素,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)。

sp_dbcmptlevel [ [ @dbname = ] name ] 

    [ , [ @new_cmptlevel = ] version ]

[ @dbname = ] name

要為其更改相容級别的資料庫的名稱。資料庫名稱必須符合辨別符的規則。name 的資料類型為 sysname,預設值為 NULL。

[ @new_cmptlevel = ] version

資料庫要與之相容的 SQL Server 的版本。version 的資料類型為 tinyint,預設值為 NULL。該值必須為下列值之一:

傳回代碼值

0(成功)或 1(失敗)

結果集

如果未指定任何參數或未指定 name 參數,則 sp_dbcmptlevel 将傳回錯誤。

如果指定 name 但未指定 version,則 資料庫引擎将傳回一條消息,顯示指定資料庫的目前相容級别。

有關相容級别的說明,請參閱 ALTER DATABASE 相容級别 (Transact-SQL)。

權限

隻有資料庫所有者、sysadmin 固定伺服器角色和 db_owner 固定資料庫角色的成員(前提是您要更改目前資料庫)才能執行此過程。