Microsoft 兼容级别的含义是什么?

ber*_*d_k 7 sql-server compatibility-level

在 SQL-Server 2005 上将 cmptlevel 设置为 80 会禁止使用 PIVOT 和 APPLY,但不会影响分析函数的使用。这背后有什么道理吗?

Ken*_*eth 5

MSDN ALTER DATABASE Compatibility Level解释了各个级别的行为。(只需向下滚动,您就会找到以下主题的比较表)

如果您只是从 MSDN 顶部菜单更改版本,您可以找到更具体的比较表(它们链接到以下列表中的前 3 个版本)

  • 80 = SQL Server 2000
  • 90 = SQL Server 2005
  • 100 = SQL Server 2008 和R2
  • 110 = SQL Server 2012
  • 120 = SQL Server 2014

  • 较低兼容级别和级别 120 之间的差异

    • 示例行(使用旧的查询优化器代替新的 SQL Server 2014 引擎,其中包括对创建和优化查询计划的组件的实质性改进)
  • 较低的兼容性级别和级别 110 之间的差异


gbn*_*gbn 5

我观察到的一些基本原理,但这并不详尽,只是我的猜测

兼容性级别不是一个全有或全无的事情。它在您修复问题时提供部分向后兼容性。

一个带有 LOCK 提示的简单示例

FROM
   Table (NOLOCK)   -- not allowed with level 90+
Run Code Online (Sandbox Code Playgroud)

FROM
   Table WITH (NOLOCK)   -- WITH is optional for level 80
Run Code Online (Sandbox Code Playgroud)

为什么现在这是强制性的,我不知道。与 CTE 有关系吗?

对于 PIVOT 和 APPLY,我怀疑使用这些的 SQL 语句只是非法的 SQL Server 2000 语法,而 ROW_NUMBER 只是一个未知函数并且“不太”关键

使用 CROSS APPLY 的示例。对于 80,这是非法的 SQL Server 2000 语法。

FROM
   SomeTable S
   CROSS APPLY --or JOIN
   dbo.someTVF (S.column)
Run Code Online (Sandbox Code Playgroud)

由于较新版本中的级别较低,因此有很多关于错误的问题供您查看并希望得到理解

仅供参考,80-90 和 90-100 差异的完整列表