请单击以进行评分并提供反馈
TechNet
TechNet 库
SQL Server
SQL Server 2008
数据库引擎
技术参考
 sp_dbcmptlevel (Transact-SQL)

  开启低带宽视图
社区内容
本节内容
统计 批注 (0)
同时提供下列产品的其他版本:
SQL Server 2008 联机丛书(2009 年 5 月)
sp_dbcmptlevel (Transact-SQL)

将某些数据库行为设置为与指定的 SQL Server 版本兼容。

ms178653.note(zh-cn,SQL.100).gif重要提示:
后续版本的 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
社区内容   什么是社区内容?
添加新内容 RSS  批注
Processing
© 2009 Microsoft Corporation 版权所有。 保留所有权利  |  商标  |  隐私权声明
Page view tracker