sp_dbcmptlevel (Transact-SQL)

設定要相容於指定 SQL Server 版本的特定資料庫行為。

重要注意事項重要事項

未來的 Microsoft SQL Server 版本將移除這項功能。請勿在新的開發工作中使用此功能,並且儘速修改使用此功能的應用程式。 請改用 ALTER DATABASE 相容性層級

主題連結圖示Transact-SQL 語法慣例

語法

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,則 Database Engine 會傳回一則訊息,顯示指定資料庫目前的相容性層級。

備註

如需相容性層級的說明,請參閱<ALTER DATABASE 相容性層級 (Transact-SQL)>。

權限

只有資料庫擁有者、系統管理員 (sysadmin) 固定伺服器角色的成員和 db_owner 固定資料庫角色 (如果您變更目前的資料庫的話) 能夠執行這個程序。

範例

A. 將相容性層級變更為 SQL Server 2000

下列範例將 AdventureWorks 資料庫的相容性層級改成 80。

EXEC sp_dbcmptlevel AdventureWorks, 80;
GO

B. 相容性層級在 ORDER BY 上的作用 (狀況 1)

下列範例說明相容性層級 80 和 90 在 ORDER BY 繫結中的差異。這個範例會在 tempdb 資料庫中建立範例資料表 SampleTable。

USE tempdb;
CREATE TABLE SampleTable(c1 int, c2 int);
GO

在相容性層級 90 (預設值) 中,下列 SELECT... ORDER BY 陳述式會產生錯誤,因為 AS 子句 c1 中的資料行名稱模稜兩可。

SELECT c1, c2 AS c1
    FROM SampleTable
    ORDER BY c1;
GO

將資料庫重設為相容性層級 80 之後,相同的 SELECT... ORDER BY 陳述式就會成功。

sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c1
    FROM SampleTable
    ORDER BY c1;
GO

下列 SELECT... ORDER BY 陳述式在兩個相容性層級中都能夠運作。

sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO

sp_dbcmptlevel tempdb, 90
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO

C. 相容性層級在 ORDER BY 上的作用 (狀況 2)

在相容性層級 90 (預設值) 中,下列 SELECT...ORDER BY 陳述式會產生錯誤,因為 ORDER BY 子句中有其他資料表前置詞。

SELECT c1 AS x
    FROM SampleTable
    ORDER BY SampleTable.x;
GO

將資料庫重設為相容性層級 80 之後,相同的 SELECT...ORDER BY 陳述式就會成功。

sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
    FROM SampleTable
    ORDER BY SampleTable.x;
GO

下列 SELECT...ORDER BY 陳述式在兩個相容性層級中都能夠運作。

sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
    FROM SampleTable
    ORDER BY x;
GO
sp_dbcmptlevel tempdb, 90
SELECT c1 AS x
    FROM SampleTable
    ORDER BY x;
GO