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