sp_dbcmptlevel (Transact-SQL)
設定要相容於指定 SQL Server 版本的特定資料庫行為。
重要事項 |
---|
未來的 Microsoft SQL Server 版本將移除這項功能。請勿在新的開發工作中使用此功能,並且儘速修改使用此功能的應用程式。 請改用 ALTER DATABASE 相容性層級。 |
語法
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 會傳回一則訊息,顯示指定之資料庫目前的相容性層級。
權限
只有資料庫擁有者、系統管理員 (sysadmin) 固定伺服器角色的成員和 db_owner 固定資料庫角色 (如果您要變更目前的資料庫) 能夠執行這個程序。
範例
A. 將相容性層級變更為 SQL Server 2000
下列範例會將 AdventureWorks2008R2 資料庫的相容性層級變更為 80。
EXEC sp_dbcmptlevel AdventureWorks2008R2, 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