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

注释

有关兼容级别的说明,请参阅 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