修改資料庫的相容級別

2021-09-08 16:30:03 字數 2453 閱讀 5025

/*

語法alter database database_name

set compatibility_level = 引數

database_name

要修改的資料庫的名稱。

compatibility_level

要使資料庫與之相容的 sql server 版本。該值必須為下列值之一:

80 = sql server 2000

90 = sql server 2005

100 = sql server 2008

備註對於所有 sql server 2008 安裝,預設的相容級別都為 100。除非 model 資料庫有更低的相容級別,否則 sql server 2008 中建立的資料庫會設定為該級別。將資料庫從 sql server 的任何早期版本公升級到 sql server 2008 時,如果資料庫的相容級別不在 80 以下,則該資料庫將保留其現有的相容級別。公升級相容級別低於 80 的資料庫會將資料庫的相容級別設定為 80。這既適用於系統資料庫,也適用於使用者資料庫。使用 alter database 可更改資料庫的相容級別。若要檢視資料庫的當前相容級別,請查詢 sys.databases 目錄檢視中的 compatibility_level 列。

利用相容級別獲得向後相容

相容級別只影響指定資料庫的行為,而不影響整個伺服器的行為。相容級別只實現與 sql server 的早期版本保持部分向後相容。通過將相容級別用作臨時性的遷移輔助工具,可解決相關相容級別設定控制的行為之間存在的版本差異問題。如果現有 sql server 應用程式受到 sql server 2008 中行為差異的影響,請對該應用程式進行轉換,使之能正常執行。然後使用 alter database 將相容級別更改為 100。資料庫的新相容性設定將在該資料庫下次成為當前資料庫(無論是在登入時作為預設資料庫還是在 use 語句中指定)時生效。

最佳實踐

如果在使用者連線到資料庫時更改相容級別,可能會使活動查詢產生不正確的結果集。例如,如果在編寫查詢計畫時相容級別發生更改,則編寫後的計畫可能同時基於舊的和新的相容級別,從而造成計畫不正確,並可能導致結果不準確。此外,如果將計畫放在計畫快取中供後續的查詢重用,則問題可能更加複雜。為了避免查詢結果不準確,建議您使用以下過程來更改資料庫的相容級別:

1. 通過使用 alter database set single_user,將資料庫設定為單使用者訪問模式。

2. 更改資料庫的相容級別。

3. 通過使用 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--

orexec 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。該值必須為下列值之一:

80 = sql server 2000

90 = sql server 2005

100 = sql server 2008

返回**值

0(成功)或 1(失敗)

結果集如果未指定任何引數或未指定 name 引數,則 sp_dbcmptlevel 將返回錯誤。

如果指定 name 但未指定 version,則 資料庫引擎將返回一條訊息,顯示指定資料庫的當前相容級別。

備註有關相容級別的說明,請參閱 alter database 相容級別 (transact-sql)。

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

*/

修改資料庫的相容級別

語法alter database database name set compatibility level 引數 database name 要修改的資料庫的名稱。compatibility level 要使資料庫與之相容的 sql server 版本。該值必須為下列值之一 80 sql serv...

sql server修改資料庫的相容級別

語法 alter database database name set compatibility level 引數database name 要修改的資料庫的名稱。compatibility level 要使資料庫與之相容的 sql server 版本。該值必須為下列值之一 sql server ...

SQL SERVER中修改資料庫的相容級別

語法alter database database name set compatibility level 引數database name 要修改的資料庫的名稱。compatibility level 要使資料庫與之相容的 sql server 版本。該值必須為下列值之一 sql server 2...