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,则 数据库引擎将返回一条消息,显示指定数据库的当前兼容级别。
权限
只有数据库所有者、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