/* 語法 ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 } 參數(shù) database_name 要修改的數(shù)據(jù)庫的名稱。 COMPATIBILITY_LEVEL { 80 | 90 | 100 } 要使數(shù)據(jù)庫與之兼容的 SQL Server 版本。該值必須為下列值之一: 80 = SQL Server 2000 90 = SQL Server 2005 100 = SQL Server 2008 備注 對于所有 SQL Server 2008 安裝,默認(rèn)的兼容級別都為 100。除非 model 數(shù)據(jù)庫有更低的兼容級別,否則 SQL Server 2008 中創(chuàng)建的數(shù)據(jù)庫會設(shè)置為該級別。將數(shù)據(jù)庫從 SQL Server 的任何早期版本升級到 SQL Server 2008 時,如果數(shù)據(jù)庫的兼容級別不在 80 以下,則該數(shù)據(jù)庫將保留其現(xiàn)有的兼容級別。升級兼容級別低于 80 的數(shù)據(jù)庫會將數(shù)據(jù)庫的兼容級別設(shè)置為 80。這既適用于系統(tǒng)數(shù)據(jù)庫,也適用于用戶數(shù)據(jù)庫。使用 ALTER DATABASE 可更改數(shù)據(jù)庫的兼容級別。若要查看數(shù)據(jù)庫的當(dāng)前兼容級別,請查詢 sys.databases 目錄視圖中的 compatibility_level 列。 利用兼容級別獲得向后兼容 兼容級別只影響指定數(shù)據(jù)庫的行為,而不影響整個服務(wù)器的行為。兼容級別只實現(xiàn)與 SQL Server 的早期版本保持部分向后兼容。通過將兼容級別用作臨時性的遷移輔助工具,可解決相關(guān)兼容級別設(shè)置控制的行為之間存在的版本差異問題。如果現(xiàn)有 SQL Server 應(yīng)用程序受到 SQL Server 2008 中行為差異的影響,請對該應(yīng)用程序進行轉(zhuǎn)換,使之能正常運行。然后使用 ALTER DATABASE 將兼容級別更改為 100。數(shù)據(jù)庫的新兼容性設(shè)置將在該數(shù)據(jù)庫下次成為當(dāng)前數(shù)據(jù)庫(無論是在登錄時作為默認(rèn)數(shù)據(jù)庫還是在 USE 語句中指定)時生效。 最佳實踐 如果在用戶連接到數(shù)據(jù)庫時更改兼容級別,可能會使活動查詢產(chǎn)生不正確的結(jié)果集。例如,如果在編寫查詢計劃時兼容級別發(fā)生更改,則編寫后的計劃可能同時基于舊的和新的兼容級別,從而造成計劃不正確,并可能導(dǎo)致結(jié)果不準(zhǔn)確。此外,如果將計劃放在計劃緩存中供后續(xù)的查詢重用,則問題可能更加復(fù)雜。為了避免查詢結(jié)果不準(zhǔn)確,建議您使用以下過程來更改數(shù)據(jù)庫的兼容級別: 1. 通過使用 ALTER DATABASE SET SINGLE_USER,將數(shù)據(jù)庫設(shè)置為單用戶訪問模式。 2. 更改數(shù)據(jù)庫的兼容級別。 3. 通過使用 ALTER DATABASE SET MULTI_USER,將數(shù)據(jù)庫設(shè)為多用戶訪問模式。 有關(guān)設(shè)置數(shù)據(jù)庫訪問模式的詳細(xì)信息,請參閱 ALTER DATABASE (Transact-SQL)。 */ --獲取數(shù)據(jù)庫兼容級別 SELECT name ,compatibility_level ,recovery_model_desc FROM sys.databases WITH(NOLOCK) --將用戶設(shè)置為單用戶訪問模式 ALTER DATABASE test SET SINGLE_USER --修改數(shù)據(jù)庫的兼容級別 ALTER DATABASE TEST SET COMPATIBILITY_LEVEL = 90 --or EXEC sp_dbcmptlevel TEST, 90; GO --將用戶設(shè)置為多用戶訪問模式 ALTER DATABASE test SET MULTI_USER /* 語法 sp_dbcmptlevel [ [ @dbname = ] name ] [ , [ @new_cmptlevel = ] version ] 參數(shù) [ @dbname = ] name 要為其更改兼容級別的數(shù)據(jù)庫的名稱。數(shù)據(jù)庫名稱必須符合標(biāo)識符的規(guī)則。name 的數(shù)據(jù)類型為 sysname,默認(rèn)值為 NULL。 [ @new_cmptlevel = ] version 數(shù)據(jù)庫要與之兼容的 SQL Server 的版本。version 的數(shù)據(jù)類型為 tinyint,默認(rèn)值為 NULL。該值必須為下列值之一: 80 = SQL Server 2000 90 = SQL Server 2005 100 = SQL Server 2008 返回代碼值 0(成功)或 1(失敗) 結(jié)果集 如果未指定任何參數(shù)或未指定 name 參數(shù),則 sp_dbcmptlevel 將返回錯誤。 如果指定 name 但未指定 version,則 數(shù)據(jù)庫引擎將返回一條消息,顯示指定數(shù)據(jù)庫的當(dāng)前兼容級別。 備注 有關(guān)兼容級別的說明,請參閱 ALTER DATABASE 兼容級別 (Transact-SQL)。 權(quán)限 只有數(shù)據(jù)庫所有者、sysadmin 固定服務(wù)器角色和 db_owner 固定數(shù)據(jù)庫角色的成員(前提是您要更改當(dāng)前數(shù)據(jù)庫)才能執(zhí)行此過程。 */ |
|